一、概念
工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
二、UML类图

三、基本代码实现
1、 Product 接口,定义所创建对象的接口
public interface Product {
}
2、 ConcreteProduct1 ,具体的产品,实现了Product接口
public class ConcreteProduct1 implements Product{
}
3、声明工厂方法,该方法返回一个 Product类型的对象
public interface Creator {
Product factoryMethod();
}
4、 Product1Creator ,重定义工厂方法以返回一个 ConcreteProduct实例
public class Product1Creator implements Creator{
public Product factoryMethod(){
return new ConcreteProduct1();
}
}
5、测试类
public class Main {
public static void main(String[] args) {
Creator creator = new Product1Creator();
Product product = creator.factoryMethod();
}
}
四、总结
工厂方法模式由简单工厂演变而来。简单工厂模式最大的优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关类,对于客户端来说,去除了具体的产品依赖。但是,如果增加一个新的产品对象,就需要在工厂类的条件分支语句中增加新的case或者if语句来实现产生新的对象实例。这个不符合开放-封闭原则(对扩展开放,对修改封闭)。
工厂方法模式把工厂类抽象出一个接口,这个接口只有一个方法,就是创建抽象产品对象的方法。所有要生产具体产品类的工厂,就去实现这个接口。这样一个简单工厂模式的工厂类,变成了一个抽象工厂接口和多个具体生成对象的工厂。
有一点,工厂方法模式实现时,客户端需要决定实例化哪一个工厂来实现产品对象的创建,选择判断的问题还是存在的,也就是说,工厂方法将简单工厂的内部逻辑判断移到了客户端代码来进行。
网友评论