工厂模式相当于创建新的实例对象。我们经常需要根据Class类生成实例对象,比如A a=new A()。工厂模式也用于创建实例对象。它可能会做更多的工作,但它会为您的系统带来更大的可扩展性和最小的修改。
示例类作为一个示例,您想要创建一个示例:的实例对象。
样本样本=新样本();
但是实际情况是,我们在创建样例实例时通常会做一些初始化工作,比如赋值查询数据库等等。
首先,我们认为可以使用Sample的构造函数,这样生成的实例就写成了:
样本样本=新样本(参数);
但是,如果在创建示例实例时完成的初始化工作不像赋值那么简单,那么它可能是一段很长的代码。如果它也被写入构造函数,你的代码会很难看。
如果初始化工作是一段很长的代码,这意味着有很多工作要做。把大量的工作放在一个方法中相当于把大量的鸡蛋放在一个篮子里,这是非常危险的。这也违背了Java面向对象的原则。面向对象的封装和委托告诉我们尽可能地将长代码“切割”到每个片段中。再次“封装”每一个片段(减少片段之间的耦合关系),这样风险就会分散,如果以后需要修改,只要每一个片段发生变化,就不会再发生。
我们需要将创建实例的工作与使用实例的工作分开,也就是说,将创建实例所需的大量初始化工作与Sample的构造函数分开。
你认为如果有多个相似的类,我们需要实例化多个类。这使得代码管理过于复杂。
这时,可以使用工厂方法来封装这个问题。
您不能使用上面简单新示例(参数)。同样,如果Sample有一个继承,比如MySample,根据面向接口的编程,我们需要将Sample抽象成一个接口。现在Sample是一个接口,有两个子类MySample和HisSample。
sample my sample=new Mysample();
sample his sample=new his sample();
出厂包装:
公共级工厂
公共静态样本创建器(int ){ 0
//getClass生成Sample。通常,动态类加载可以用来加载类。
if(哪==1)
返回新的SampleA();
否则如果(哪==2)
返回新的SampleB();
}
}
然后,在您的程序中,如果您想要实例化Sample,请使用
样本a=工厂.创建者(1);
举一个更实际的例子,例如,您编写了一个使用数据库封装的应用程序。您的应用程序将来可以在不同的数据库环境中运行,可能是oracle、db2、sql server等。那么连接数据库的代码就不一样了。如果使用传统的方法,就要修改代码以适应不同的环境,这是非常麻烦的,但是如果使用factory类,所有可能的数据库连接都是在factory类中实现的,通过修改您的配置文件来连接不同的数据库,所以以后做迁移的时候就不需要修改代码了。
我通常使用xml配置文件来配置多种类型的数据库连接,这非常方便。PS:工厂模式在这方面应用比较广泛。