工厂模式:提供创建对象的接口,所谓工厂模式就是将对象的new过程分离出来,满足当同一个产品后来修改的需要,不会影响到其他产品。
例子:
Sample mysample=new MySample();
Sample hissample=new HisSample();
其中Sample是MySample与HisSample的接口。
工厂方法:隐藏实现的细节。
例子:
public class Factory{
public static Sample creator(int which){
//getClass 产生Sample 一般可使用动态类装载装入类。
if (which==1)
return new SampleA();
else if (which==2)
return new SampleB();
}
}
如果要实例化Sample时.就使用
Sample sampleA=Factory.creator(1);
这样,在整个就不涉及到Sample的具体子类,达到封装效果,也就减少错误修改的机会。
抽象工厂:将Factory变成抽象类,满足工厂定制不同品种的需要(产品多样化、复杂化)。
例子:
public abstract class Factory{
public abstract Sample creator();
public abstract Sample2 creator(String name);
}
public class SimpleFactory extends Factory{
public Sample creator(){
.........
return new SampleA
}
public Sample2 creator(String name){
.........
return new Sample2A
}
}
public class BombFactory extends Factory{
public Sample creator(){
......
return new SampleB
}
public Sample2 creator(String name){
......
return new Sample2B
}
}
这样做的好处:
1) 通过工厂模式PersonOracleDAOFactory对PersonDAO进行定制,以适应数据库需求的变化(ORACLE和DB2),而且不同的数据库类型的DAO是不一样的。这里主要被体现在抽象工厂模式。正应了那句话:传统编码过程中,引入一个接口,往往也意味着同时要引入一个Factory类,也许还有一个额外的配置文件及其读写代码。
2) 面向接口编程,PersonDAO(interface)是PersonOracleDAO(class)的接口,接口PersonDAO定制了该DAO的功能,接口中规范了所有的功能方法,给调用着标明了自己的功能列表,是模块间实现低耦合的重要方式。