对工厂方法模式的理解
-工厂方法模式的定义
一个用于创建对象的接口,让子类决定将哪一个类实例化。工厂方法模式让一个类的实例化延迟到其子类。工厂 方法模式又简称为工厂模式,又可称作虚拟构造器模式或多态工厂模式。是一种创建型模式
产品类和工厂类都有自己的抽象基类,与简单工厂方法相比,此模式最重要的区别是引入了抽象工厂角色。
完整解决方案见《设计模式的艺术》 pg66。抽象产品、具体产品 抽象工厂、具体工厂
这实际上就是对简单工厂模式的扩展,将工厂类也抽象出基类,这样,改代码时,就只需要添加新的产品类代码,原来的代码就可以不作改动。
主要适用在,1)客户端不知道其所需要的对象的类,
2)抽象工厂类通过其子类来指定创建哪个对象。
一个使用例子:
使用工厂方法模式设计一个程序来读取各种不同类型的图片格式,针对每一种图片都设计一个图片 读取器,例如,GIF图片读取器用于读取GIF格式的图片,JPG图片读取器用于读取JPG格式的图片。需充分考虑系统的灵活性和可扩展性。
//图片读取器接口,抽象产品
interface Reader{
public void ReaderPic();
}
//GIF读取器:具体产品
class GIFReader implements Reader{
public void ReaderPic(){
System.out.println("GIF读取");
}
}
//JPG读取器:具体产品
class JPGReader implements Reader{
public void ReaderPic(){
System.out.println("JPG读取");
}
}
//图片读取器工厂接口:抽象工厂
interface ReaderFactory{
public Reader createReader();
}
//GIF读取器工厂类:具体工厂
class GIFReaderFactory implements ReaderFactory{
public Reader createReader(){
Reader reader = new GIFReader();
return reader;
}
}
//JPG读取器工厂接口:抽象工厂
class JPGReaderFactory implements ReaderFactory{
public Reader createReader(){
Reader reader = new JPGReader();
return reader;
}
}
客户端的测评代码
class Client{
public static void main(String argx[]){
ReaderFactory factory;
Reader reader;
factory = new GIFReaderFactory();
reader = factory.createReader();
reader.ReaderPic();
}
}
可以利用JAVA中的反射与配置文件将扩展,也就不再需要修改客户端代码