设计模式学习笔记:就一句话的创建实例是如何演变成工厂模式的?
工厂方法模式定义
Defines an interface for creating an object,but let subclasses decide which class to instantiate. Factory Method lets a class defer instantiation to subclasses
一般java创建一个实例是这样
Product p= new Product();
可以实际情况要复杂。创建一个实例需要非常多的初始化工作。诸如:
int data[] = [1,2,3];
Product p= new Product(data);
Product p= new Product(data);
为了复用,我们就用一个类Factory把数据初始和实例生成分离出去。
Factory factory = new Factory() ;
....
Product p = factory.createInstance()
....
Product p = factory.createInstance()
再鉴于面向对象编程的原则之一:设计一个类的时候,该类不面对一个具体类的变量,而是接口或者抽象类变量
我们把Factory和Product都抽象为一个接口或者抽象类。
Factroy factory = new ConcreteFactory()
........
Product p = factory.createInstance();
........
// ConcreteFactory.java
public Product createInstance(){
int data[] = [1,2,3];
return new ConcreteProduct(data);
}
........
Product p = factory.createInstance();
........
// ConcreteFactory.java
public Product createInstance(){
int data[] = [1,2,3];
return new ConcreteProduct(data);
}
这时候,我们再看UML图。这就完全吻合上了。所谓工厂模式就是在遵守面向对象编程原则下对创建实例写法的普通归纳。