学习设计模式之详解工厂模式(2)
5. 工厂模式实例
让我们来“改造”那个简单工厂的例子:
class Program { static void Main(string[] args) { Factory factory = new FactoryA(); Product product = factory.CreatePruduct(); } } enum Type { ProductA, ProductB } abstract class Factory { public abstract Product CreatePruduct(); } class FactoryA : Factory { public override Product CreatePruduct() { return new ProductA(); } } class FactoryB : Factory { public override Product CreatePruduct() { return new ProductB(); } } abstract class Product { } class ProductA : Product { } class ProductB:Product { }
让我们来总结下工厂模式的特点:
工厂模式把简单工厂从核心地位给拉了出来,把创建的权利又交还到客户手中,从而让整个项目的核心转移。
6. 无模式的实现
class Program { static void Main(string[] args) { Product product = new ProductA(); } } abstract class Product { } class ProductA : Product { } class ProductB : Product { }
7. 工厂方法大比拼
本节是全文的核心,我想也是最容易引起争论的地方,在这里,我只表明我自己的观点,也欢迎大家多提意见!
如果单单从上文的例子来看,使用工厂方法未免有了为了模式而模式之嫌。
假设我们的需求改为了制造一个ProductB的对象。让我们来看看3种模式的大比拼:
<1> 简单工厂模式需要在客户端发生变动:
static void Main(string[] args) { Factory factory = new Factory(); //factory.CreatePruduct(Type.ProductA); factory.CreatePruduct(Type.ProductB); }
<2> 工厂模式需要在客户端发生变动:
static void Main(string[] args) { //Factory f = new FactoryA(); Factory f = new FactoryB(); f.CreatePruduct(); }
<3> 若不用设计模式:
static void Main(string[] args) { //Product product = new ProductA(); Product product = new ProductB(); }
三种方式没有什么区别。也就是说,如果在客户端只有一个调用,而且只需要简单的一步初始化,我们完全没有必要为了模式而模式。