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
- Unity常用的设计模式_工厂模式系列之工厂方法模式
- Unity常用的设计模式_工厂模式系列之简单工厂模式
- Unity常用的设计模式_工厂模式系列之抽象工厂模式
- 常用设计模式之工厂方法模式、抽象工厂模式
- 常用Java设计模式系列(5)- 简单工厂、工厂方法模式和抽象工厂模式
- 设计模式之_简单工厂模式、工厂方法模式、抽象工厂模式、策略模式、策略与工厂的区别(转) 的区别(转)
- 【设计模式系列】--工厂方法
- Unity设计模式之简单工厂模式
- Unity设计模式之工厂模式
- 最常用的设计模式----工厂模式家族(简单工厂模式, 工厂方法模式, 抽象工厂模式)
- 大话设计模式_工厂方法模式
- 设计模式03_工厂方法模式
- 设计模式_工厂方法模式
- 设计模式_工厂方法模式(Java)
- 大话设计模式之简单工厂模式、抽象工厂模式及工厂方法模式的比较
- 大话设计模式之简单工厂模式、抽象工厂模式及工厂方法模式的比较
- 设计模式之工厂系列
- 大话设计模式之_工厂模式
- JavaScript基础(二)
- 使用while循环语句计算1+1/2!+1/3!+···+1/20!之和
- MYSQL 操作数据库
- Eclipse运行性能调优
- Matplotlib 对 LaTeX 的支持
- Unity常用的设计模式_工厂模式系列之工厂方法模式
- A*算法详解(转)
- Android之Mediaplayer音乐播放器
- 欢迎使用CSDN-markdown编辑器
- 第 3 章 线性表
- Struts2中的#、$、%的区别
- bzoj 3218: a + b Problem 最小割+可持久化线段树
- 欲学习的内容
- 暴力大神hxx 树形dp