Unity常用的设计模式_工厂模式系列之工厂方法模式

来源:互联网 发布:如何在淘宝上注册网店 编辑:程序博客网 时间:2024/06/05 10:48

在简单工厂模式中,只提供一个工厂类,该工厂类处于产品类进行实例化的中心位置,它知道每一个产品对象的创建细节,并决定何时实例化哪一个产品类。但是简单工厂模式有一个致命的缺点,就是当有欣产品要加入到系统中时,必须修改工厂类,加入必要的逻辑判断,这显然违背了“开闭原则”。在简单工厂模式中,所有产品是由一个工厂创建的,工厂类职责较重,业务处理较为复杂,具体产品与工厂类的耦合度高,严重影响了系统的灵活性和拓展性。

使用工厂方法模式可以很好的解决这个问题。


工厂方法模式

1.工厂方法模式动机


2.工厂方法模式定义

定义一个可以产生对象的接口,但是让子类决定要产生哪一个类的对象。工厂方法模式让类的实例化程序延迟到子类中实施。

3.工厂方法模式结构


4.工厂方法模式主要代码(TV例子)

抽象TV类(TV.cs)

/*TV抽象类*/public abstract class TV{public abstract void Play();}

具体TV类

SamsungTV.cs

/*三星*/public class SamsungTV : TV{public void Play(){Console.WriteLine("三星电视播放......");}}

TCLTV.cs

/*TCL*/public class TCLTV : TV{public void Play(){Console.WriteLine("TCL电视播放......");}}


抽象工厂类(TVFactory.cs)

/*抽象工厂类*/public abstract class TVFactory{public TV ProductTV();}

具体工厂类

Samsung工厂

/*samsung工厂类*/public class SamsungFactory : TVFactory{public TV ProductTV(){return new SamsungTV();}}

TCL工厂

/*TCL工厂类*/public class TCLFactory : TVFactory{public TV ProductTV(){return new TCLTV();}}


工厂方法模式基本完成,当需要添加一个TV品牌的时候,只需要添加两个类。

具体TV类

/*海尔*/public class HaiErTV : TV{public void Play(){Console.WriteLine("海尔电视播放......");}}

具体TV工厂类

/*HaiEr工厂类*/public class HaiErFactory : TVFactory{public TV ProductTV(){return new HaiErTV();}}


测试

TV tv;TVFactory factory;factory = new HaiErFactory();tv = factory.ProductTV();tv.Play();

5.总结

优点:工厂方法模式具有简单工厂模式的优点外,还要另一个优点,在加入新产品的时候,无须修改抽象工厂和抽象产品提供的接口,无须修改客户端,也无须修改其它具体工厂和具体产品。

缺点:在添加产品的时候,需要编写新的具体产品类和对应的具体工厂类,一定程度增加了系统复杂度。


6.参考

《设计模式》主编:刘伟

阅读全文
0 0
原创粉丝点击