工厂方法模式
工厂方法模式(别名Virtual
Constructor)定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。
特点:
1. 工厂方法让子类决定要实例化的类是哪一个。所谓的“决定”并不是指模式允许子类本身在运行时做决定,而是指编写抽象工厂类时,不需要知道实际创建的产品是哪一个。选择使用了那个子类,自然就决定了实际使用的产品是什么。
2. 工厂方法模式是由简单工厂经过重构(利用多态性替换复杂的if else逻辑)而成。
3. 工厂方法是简单工厂的推广,简单工厂是工厂方法的退化。
4. 在工厂方法模式中,核心的工厂类不再负责所有产品的创建,而是将具体创建工作交给子类去做。这个核心类仅仅负责给出具体工厂必须实现的接口,而不接触哪一 个产品类被实例化这种细节。这使得工厂方法模式可以允许系统在不修改工厂角色的情况下引进新产品。在Factory Method模式中,工厂类与产品类往往具有平行的等级结构,它们之间一一对应。
5.
工厂方法不一定每一次都返还一个新的对象。但是它所返还的对象一定是他自己创建的,而不是在一个外部对象里面创建,然后传入工厂对象中的。
原则:
依赖倒置原则:要依赖抽象,不要依赖具体类。
依赖倒置的指导方针:
1. 变量不可以持有具体类的引用
2. 不要让类派生自具体类
3. 不要覆盖基类中已经实现的方法
实现:
抽象工厂(工厂方法模式的核心,也可以是抽象类):
public interface Creator
{
}
具体工厂:
public class ConcreteCreator1 implements Creator
{
}
public class ConcreteCreator2 implements Creator
{
}
抽象产品:
public interface Product
{
}
具体产品:
public class ConcreteProduct1 implements Product
{
}
public class ConcreteProduct2 implements Product
{
}
适用性:
在以下情况下,适用于Factory Method模式:
参与者:
作者:God bless you
出处:http://www.cnblogs.com/god_bless_you/
本文版权归作者,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.