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

版权声明:转载请联系作者,并注明出处 https://blog.csdn.net/onehao/article/details/9360697

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

猜你喜欢

转载自blog.csdn.net/onehao/article/details/9360697