设计模式
你的头发真的好长
这个作者很懒,什么都没留下…
展开
-
设计模式学习专栏一--------策略模式
策略模式 场景 设计鸭子模拟器系统,实现具有各种行为组合的鸭子 刚开始设计时,此系统设计了标准的OO技术,设计了一个鸭子超类,并让各种鸭子继承此超类 问题引入 : "让鸭子会飞! 此程序需要会飞的鸭子(火箭喷射鸭)" "鸭子的叫声不同(橡皮鸭, 模型鸭)" 较差的实现方式 在超类中增加fly()方法,并给予实现. 所有的鸭子都将拥有飞行的...原创 2019-03-10 22:06:07 · 188 阅读 · 0 评论 -
设计模式学习专栏十一--------状态模式
设计模式学习专栏十一--------状态模式 名称: 状态模式 (State) 价值观念: 通过改变对象内部的状态来帮助对象控制自己的行为 场景 设计一个万能糖果机 , 我们希望设计尽可能有弹性 , 而且将来我们可能要为它增加更多的行为~ 刚开始的设计方式 public class GumballMachine { final static int SOLD_OUT = 0; fina...原创 2019-03-12 20:34:46 · 168 阅读 · 0 评论 -
设计模式学习专栏十--------组合模式
设计模式学习专栏十--------组合模式 场景 回顾迭代器模式的案例 我们希望能够加上一份 餐后甜点的 “子菜单” 我们需要什么? 我们需要某种树形结构 , 可以容纳菜单 , 子菜单和菜单项 我们需要确定能够在每个菜单的各个项之间游走 . 而且至少要像现在用迭代器一样方便 我们也需要能够更有弹性地在菜单项之间游走 . 比如说 , 可以只需要遍历甜品菜单, 或者可以遍历餐厅的整个菜单(包括...原创 2019-03-12 15:01:57 · 202 阅读 · 0 评论 -
设计模式学习专栏九--------迭代器模式
设计模式学习专栏九--------迭代器模式 名称 : 迭代器模式(Iterator) 价值观念: 管理良好的集合 场景 爆炸性新闻: 对象村餐厅和煎饼屋餐厅屋合并了 , 我们打算用煎饼屋的菜单当早餐 , 用对象村餐厅的菜单当中餐. 可是 … 煎饼屋的菜单用集合来存储 , 对象村餐厅使用数组来存储… 它们都不想改变自己的存储结构, 因为有本身很多代码都依赖于原有的数据结构 那么, 合并后的餐...原创 2019-03-12 11:51:16 · 154 阅读 · 0 评论 -
设计模式学习专栏八--------模板方法模式
设计模式学习专栏八--------模板方法模式 名称 : 模板方法模式 (Template Method) 价值观念: 封装算法 场景 创建咖啡和茶 最初的设计 发现第一步和第三步是相同的步骤, 因此将它们抽取到 父类中 仔细观察 , 冲泡步骤的 第二和第四步实质上是一样的, 只是对于不同的饮料有不同的实现. 我们可以把 它们也进行抽象吗? 进一步设计 将泡步骤的 第二和第四步 ...原创 2019-03-11 23:56:27 · 180 阅读 · 0 评论 -
设计模式学习专栏七--------外观模式
设计模式学习专栏七--------外观模式 场景 在我们进入外观模式之前 , 让我们看一个风行全美的热潮: 建立自己的家庭影院 经过一番研究比较,你组装了一套杀手级别的系统 , 内含DVD播放器, 投影机, 自动屏幕, 环绕立体声 ,甚至还有爆米花机. 以下是相关的组件 正当一切部署完成,想要开始享受一部电影时,却发现… 使用代码实现看电影 出现的问题 我们的客户端需要面对太多具体的组件了...原创 2019-03-11 22:59:44 · 158 阅读 · 0 评论 -
设计模式学习专栏六--------适配器模式
设计模式学习专栏六--------适配器模式 场景 如何让火鸡Turckey冒充鸭子Duck 鸭子接口 public interface Duck { public void quack(); public void fly(); } 鸭子的实现类--绿头鸭 public class MallardDuck implements Duck { ...原创 2019-03-11 21:52:02 · 176 阅读 · 0 评论 -
设计模式学习专栏五--------命令模式
设计模式学习专栏五--------命令模式 场景 设计一个智能遥控器,遥控器上有7个插槽 , 每个插槽(某设备具体供应商)对应两个按钮 on , off ,以及一个全局的撤销操作undo. 较差的实现方式 判断每个插槽对应的具体厂商是谁, 然后做出对应的动作 if(slot1 == Light){ light.on() }else if(slot1 == Hot...原创 2019-03-11 18:04:06 · 314 阅读 · 0 评论 -
设计模式学习专栏四--------装饰者模式
设计模式学习专栏四--------装饰者模式 场景 设计星巴兹咖啡, 主体(DarkRoast等) + 配料 (摩卡,奶泡等) , 顾客在购买咖啡时, 也可以要求在其中加入各种调料, 如蒸奶(Steamed Milk) , 豆浆(Soy) , 摩卡(Mocha) 或者奶泡. 星巴兹会根据所加入的调料收取不同的费用.所以 订单系统必须考虑到这些调料部分 刚开始的实现方式 思路:...原创 2019-03-11 13:04:31 · 482 阅读 · 0 评论 -
设计模式学习专栏三--------观察者模式
设计模式学习专栏三--------观察者模式 场景 建立一个气象站应用, 利用WeatherData对象取得数据,并更新三个布告板: 目前状况 , 气象统计 , 天气预报 此系统中的三个部分是气象站(获取实际气象数据的物理装置) , WeatherData对象(追踪来自气象站的数据,并更新布告板) 和 布告板(显示目前天气状况给用户看.) WeatherData对象知道如何跟物理...原创 2019-03-11 01:39:54 · 217 阅读 · 0 评论 -
设计模式学习专栏二--------单例模式
单例模式 单例模式:确保一个类最多只有一个实例,并提供一个全局访问点 有些对象我们只需要一个:线程池、缓存、硬件设备等 如果多个实例会有造成冲突、结果的不一致性等问题 单例模式的类图: 由类图转化的代码 public class Singleton { private static Singleton uniqeInstance=null; //私有的构...原创 2019-03-10 23:38:50 · 177 阅读 · 0 评论 -
设计模式学习专栏十一--------代理模式
设计模式学习专栏十一--------代理模式 名称 : 代理模式(Proxy) 价值观念 : 控制对象的访问 场景 之前以状态模式开发的糖果机设计得很好 , 现在老板希望能远程获取旗下所有糖果机得库存状况 RMI示意图 客户到RMI 的注册表中查找 RMI注册表返回Stub对象 客户调用Stub的方法,就像Stub就是真正的服务对象一样 客户辅助对象(Stub)打包调用信息(变量\方法名称等...原创 2019-03-13 13:43:28 · 170 阅读 · 0 评论