你想如果有多个类似的类,我们就需要实例化出来多个类。这样代码管理起来就太复杂了。
这个时候你就可以采用工厂方法来封装这个问题。
public interface IProduct { } public class ConcreteProductA : IProduct { } public class ConcreteProductB : IProduct { } public class Factory { public IProduct Create() { // 工厂决定到底实例化哪个子类。 return new ConcreteProductA(); } }
那么再延伸下,如果我要生产B怎么办
一般我们会想到,加入参数,好,说到参数,你想怎么加,呵呵,设计模式的作者给我一个例子,我觉得非常好,如果我们一般人,我想多数这么做
public IProduct Create(IProduct product) { //判断B是否实现了接口 //B b = new B(); //if (b.GetType().GetInterface("ISay") != null) //{ // //如果实现了接口“ISay”,... //} // 工厂决定到底实例化哪个子类。 }
但是我觉得作者这里给出了另外一种思维模式,让我们看看
public enum Category { A, B } public static class ProductFactory { public static IProduct Create(Category category) { switch (category) { case Category.A: return new ConcreteProductA(); case Category.B: return new ConcreteProductB(); default: throw new NotSupportedException(); } } }
并不是说这样非常好,但是这种思想还是值得在某些地方借鉴