设计模式之男孩女孩(二)
来源:互联网 发布:济南链企网络 编辑:程序博客网 时间:2024/05/08 04:37
【场景】
晚上男孩(Boy)在女孩(Girl)家第一次陪她过生日,当然还有她的朋友。晚餐后,女孩(Girl)的朋友都走了,女孩(Girl)最后一个送男孩(Boy)出去。在快分手的时候女孩(Girl)突然说想看电影。男孩(Boy)愣了一下,随后打电话咨询当前各电影院的播发电影,最后选择一个播发“哼唱”的电影院。在出电影院的时候,因人多男孩(Boy)顺势牵上了女孩(Girl)的手,就这样男孩(Boy)送女孩(Girl)回家。(待续……)
【需求】
男孩(Boy)想要了解(得到)当前各电影院的播发电影,只要通过一个方法(电话咨询)就可以得到。
【分析】
咋看下,上面所描述的场景跟要所讲的模式没有关系。可世间万物的道理是一样的,追究其宗点肯定有个最根本的原理。就象所有物体都有原子、分子组成一样。
“电话咨询”是一个得到当前各电影院的播发电影的“方法”,象我们常见的114。而114等无非也就是通过各电影院提供的播放清单得到。也就是说是电影院提供自己要播发的电影,创建要播发的“电影”是具体的电影院。
谁都知道电影院播发电影,这里说的“电影院”、“电影”是接口或抽象类。
而具体的电影院才提供具体播发的电影,也就是由子类(具体的电影院)来决定具体实例化那个类(具体播发的电影)。
【作用意图】
就是定义了一个创建对象的接口或抽象类(电影院接口),由子类(具体的电影院)来决定要实例化的类(具体播发的电影)是哪一个。
把类(具体播发的电影)的实例化推迟到子类(具体的电影院)。通过让子类决定该创建的对象是什么,来达到封装对象创建过程的目的。
【使用场合】
一个类不知道它所必须要创建对象的类;(电影院基类是不知道具体的电影院播发的电影)
一个类希望由它的子类来指定它所创建的对象;(由具体的电影院创建具体要播发的电影)
【效果】
优点:当我们要获取当前各电影院的播发电影,只需要知道具体的电影院对象和获取播发电影的方法就可以,而不用直接去创建电影对象。
缺点:当要添加一个新的电影(产品对象)时,需要添加一个具体对象(具体播发的电影)以及一个具体工厂对象(具体的电影院),但原有的代码不变。
【加深理解】
大家可能看到我们也可以直接用“简单工厂”的模式,根据参数直接实例一个电影对象。的确是可以的,但这个是不符合“开放-封闭”原则。另外“简单工厂”并不是GOF的23种设计模式之一。
开放-封闭原则(OCP:The Open-Closed Principle):是OOD原则的一个基石。最早是由Bertrand Meyer提出,
英文的原文是:Software entities should be open for extension,but closed for modification。意思是说:一个软件实体应当对扩展开放,对修改关闭。也就是说,我们在设计一个模块的时候,应当使这个模块可以在不被修改的前提下被扩展,换句话说就是,应当可以在不必修改源代码的情况下改变这个模块的行为。
为什么会有设计模式的存在?在面对需求的多样性、异动性,这需要我们在设计系统时,要注意系统的扩展性,把可能异动的部分封装起来。这也将给代码重构提供方便。
简单工厂和工厂方法是可以相互演变的,关键看当要创建的对象(电影)是否是固定不变的:
当固定不变的时候:工厂方法就可以演变成简单工厂,所以简单工厂可以看做参数化的工厂方法。
(比如根据电影名称就可以直接获取电影对象。)
当需要改变的时候:简单工厂就可以改装成工厂方法。
简单工厂和工厂方法的异同点:
相同点:都需要创建产品(电影)接口或抽象类、具体产品(电影)对象类。
不同点:
简单工厂,把产品对象的创建的工作封装在一类的方法中。
工厂方法,定义好创建产品对象的接口,由子类具体的产品对象的创建工作。
形象说,简单工厂允许一个工厂(方法)造产品,工厂方法允许不同的工厂(子类)都造产品。
【实现类图】
- 设计模式之男孩女孩(二)
- 设计模式之男孩女孩(一)
- 设计模式之男孩女孩(三)
- 设计模式之男孩女孩(四)
- 男孩,女孩!
- 男孩,女孩!
- 男孩,女孩
- 男孩女孩
- 男孩和女孩
- 女孩问,男孩答
- 男孩亲女孩
- 女孩哭男孩沉默
- 女孩和男孩
- 女孩和男孩
- 男孩和女孩
- 男孩如何追女孩
- 男孩和女孩
- 男孩和女孩
- Java你不得不知道的,却总是感到迷惑的东西
- Tomcat发布项目方法
- 广洲远光软件公司面试题
- 自定义非预期错误页面
- 2410的I2C读写问题
- 设计模式之男孩女孩(二)
- Jquery提交表单 Form.js官方插件
- 在cin中输入输出空格的实现
- 人生致命的八个经典问题
- 解决XP升级后开机出现盗版提示方法
- 简单模板
- 什么是程序员的优秀品质?
- SOA案例研究竞赛结果揭秘SOA成功的主要因素
- 寓言:女人最想要的是什么?