2016.12.12 学习日记-简单工厂模式
来源:互联网 发布:象棋算法 编辑:程序博客网 时间:2024/06/12 19:31
专业课《软件设计模式》学了好几周,完全还没进入状态,还停留在上半学期的php中。这几天温习了下c#,准备好好自学下软件设计模式,不然期末要挂呀。
Day one: 简单工厂模式
类图:
以上内容摘抄于百度百科对于简单工厂模式的介绍,但每次看到这些介绍,那可是个头痛啊,结合书本以及网上资料自己简单总结了一下:
优点:简单工厂模式将对象的创建和对象本身的处理分离开来,降低了系统的耦合度,便于修改;
在有所需求时,只需传入正确的参数,通过工厂类实例化出合适的对象
缺点:违反高内聚责任分配原则,将全部创建逻辑集中到了一个工厂类中,它所创建的类只能是事先考虑到的,如果需要添加新的类,则就需要改变工厂类。
实例:简单电视机工厂
某电视机厂专为各知名电视机品牌代工生产各类电视机,当需要海尔牌电视机时只需要在调用该工厂的工厂方法时传入参数“Haier”,需要海信电视机时只需要传入参数“Hisense”,工厂可以根据传入的不同参数返回不同品牌的电视机。现使用简单工厂模式来模拟该电视机工厂的生产过程。
抽象产品类TV
包含了所有产品都具有的业务方法play()
public class TV { public virtual void play() { } }具体产品类 HaierTV
继承于TV是抽象产品TV的子类,实现了TV中的业务方法play()
class HaierTV :TV { public override void play() { Console.WriteLine("HaierTV playing--"); } }具体产品类 HisenseTV
继承于TV是抽象产品TV的子类,实现了TV中的业务方法play(),不同的具体产品,play()方法不同
class HisenseTV : TV { public override void play() { Console.WriteLine("HisenseTV playing--"); } }
工厂类TVFcatory
工厂类,整个产品的核心,提供了静态工厂方法produceTV(),根据参数值得不同实例化具体产品,返回相应对象。
public class TVFactory { public static TV produceTV(String brand) { TV tv = null; if (brand == "Haier") { Console.WriteLine("电视机工厂生产海尔电视机!"); tv = new HaierTV(); } else if (brand == "Hissense") { Console.WriteLine("电视机工厂生产海信电视机!"); tv = new HisenseTV(); } else { throw new ArgumentOutOfRangeException("暂不能生产该品牌电视机!"); } return tv; } }客户端代码
class Program { static void Main(string[] args) { TV tv1; tv1 = TVFactory.produceTV("Haier"); tv1.play(); Console.ReadKey(); } }
总结:对面向对象的特性,有了进一步的了解。但还是不能够很熟练的运用,需要更多地总结、熟悉吧。每天熟悉一个模式,在期末考试之前做到熟练掌握!加油啊!考试月,各个课程都要上心,将压力转化为动力。Go Go Go!
2016.12.12
- 2016.12.12 学习日记-简单工厂模式
- 学习日记-工厂模式
- 2016.12.19 学习日记-工厂方法模式
- 2016.12.28 学习日记-抽象工厂模式
- 简单工厂模式学习
- 简单工厂模式学习
- 学习简单工厂模式
- 简单工厂模式学习
- 简单工厂模式学习
- OC学习日记015-工厂模式
- 简单工厂模式学习博客
- 简单工厂模式学习笔记
- 学习笔记:简单工厂模式
- 设计模式学习-简单工厂
- 简单工厂模式的学习
- 学习笔记:简单工厂模式
- 简单工厂模式学习总结
- 简单工厂模式--结合实例学习简单工厂模式
- ViewPager设置完FragmentPagerAdapter后动态的进行增加删除Fragment
- 你不懂JS:作用域与闭包 第四章:提升
- 准确率与召回率
- C++多态的概念以及用途(通俗易懂)
- Leetcode Combination Sum IV
- 2016.12.12 学习日记-简单工厂模式
- HDU 1237
- jdbc学习:jdbc事务操作
- 锋利的jQuery读书笔记-第1章 认识jQuery
- QT5.70MSVC版连接MYSQL5.7.16.0连接不上QMYSQL解决
- 第三方微博登录:你所访问的站点在微博认证失败,错误号:21322
- 1057. 数零壹(20)
- PrefixSpan算法详解
- Hibernate基础:快速入门(5):删除数据