一、最简单的工厂模式 其一
Factory抽象类:内有一个Create抽象方法,子类FactoryA:实现Create方法生成A产品,子类FactoryB:实现Create方法生成B产品
二、最简单的工厂模式 其二
Factory抽象类:内有Create(int type)抽象方法,子类FactoryChild:实现Create(int type)方法根据传入的type来对应生成不同的产品。
三、以泛型类形式实现的工厂模式(稍微难那么一丢丢,不过也不难哈)
伪代码如下:
class Factory<T> where T : Produce //可使用where来进行约束T,如此处是约束T是必须要继承自Produce类的
{
void Create(){ return T();}
}
外部用法是直接 Factory f = new Factory<ProduceA>(); ProduceA pa = f.Create();
四、以泛型方法形式实现的工厂模式
伪代码:
class Factory{
void Create<T>(){ return T(); } //这里的T也可以进行约束的哦~
}
外部用法是直接 Factory f = new Factory(); ProduceA pa = f.Create<ProduceA>();
上面的代码如果有拼写错误请无视,看懂就好蛤~
最好的个人认为最好的是第一种,为什么?第二种工厂是通过if来区分不同产品生产的,所以一个工厂类会不断变大,进而难以维护,第三种工厂和第四种工厂都不利于多人开发,因为泛型就算约束的再好,一旦产品类群组超级多的时,就很难确定应该要将T填写成什么类才是正确的,当然你说“我可以全搜一下,看看是不是这个类型可以用这个泛型工厂创建,不就知道了吗?”,如果真的每次创建对象的时候都要这样看一看,你觉得会比起第一种或第二种方式好吗?当然小型项目是察觉不出这种坑爹的问题的,当项目变大了,可能就很难受了。
但是第一种工厂会导致工厂类过多问题(俗称:类爆炸),这时候可能就要用到抽象工厂来进行减少类的重复性,其实抽象工厂是很少用到的,它其实就是在工厂模式上的封装。后期会更新解释抽象工厂,当然解释的也不是很全面因为我从来没用过啊。。