工厂方法模式属于创建型模式,与简单工厂相比 它多了工厂的接口和生产固定产品的工厂类,即每种产品都有固定的工厂。
一个创建产品对象的工厂接口,将实际创建工作推迟到子类当中。核心工厂类不再负责产品的创建,这样核心类成为一个抽象工厂角色,仅负责具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得工厂方法模式可以使系统在不修改具体工厂角色的情况下引进新的产品,同时增加新的工厂。
角色:
产品接口:定义产品统一的行为
具体产品:具体的产品类型
工厂接口:定义工厂统一的行为
具体工厂:具体的工厂类型
示例:
public interface IProduct { void myfunction(); }
---
class Product1 implements IProduct{ public void myfunction(){ System.out.println("function1"); } }
---
public interface IFactory{ IProduct product(); }
---
public class Factory1 implements IFactory{ public IProduct product(){ return new Product1(); } }
---
public class FactoryTest{ public static void main(String[] args){ IFactory factory1 = new Factory1(); IProduct product = factory1.product(); product.myfunction(); IFactory factory2 = new Factory2(); product = factory2.product(); product.myfunction(); } }
输出:
function1
function2
可以看到,只需创建不同的工厂就可以生产不同的产品,这也是工厂方法模式对扩展开放的表现,增加新产品不再需要修改任何已有的类,而简单工厂却需要修改工厂类。符合开闭原则,对扩展开放,对修改关闭。
end