您的位置:首页 > 其它

设计模式之 - 工厂方法模式 (Factory Method design pattern)

2013-07-18 19:46 591 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: