1. 模式意图:
定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。
2. 别名(Virtual Constructor)
3. 结构
4. 工厂方法模式C#实现
interface Product {
public void productMethod();
} class ConcreteProduct : Product {
public void productMethod() {
Console.WriteLine("产品");
}
} interface Creator {
public Product createProduct();
} class ConcreteCreator: Creator {
public IProduct createProduct() {
return new Product();
}
} public class Client {
static void main() {
Creator creator = new ConcreteCreator();
Product Product = creator.createProduct();
prodect.productMethod();
}
}
5. 应用场景:
当一个类不知道它所创建的对象的类的时候。
当一个类希望由它的子类来制定它所创建的对象的时候。
当类将创建对象的职责委托给多个帮组子类中的某一个,并且你希望将哪一个帮助类是代理者这一信息局部化的时候。
创建对象需要大量重复的代码。
创建对象需要访问某些信息,而这些信息不应该包含在复合类中。
创建对象的生命周期必须集中管理,以保证在整个程序中具有一致的行为。
i.e.
6. 局限性:
第一个局限是,重构已经存在的类会破坏客户端代码。
第二个局限是,因为工厂方法所实例化的类具有私有的构造方法,所以这些类就不能扩展了。因为任何子类都必须调用父类的构造方法,但父类的私有构造方法是不能被子类调用的。
第三个局限是,如果确实扩展了工厂方法所实例化的类(例如将构造方法设为保护的,虽然有风险但也是可行的),子类必须具有所有工厂方法的一套实现。
References:
http://zh.wikipedia.org/wiki/%E5%B7%A5%E5%8E%82%E6%96%B9%E6%B3%95
《大话设计模式》
google.com