随笔分类 - head first 设计模式
23种设计模式学习笔记
摘要:策略模式是围绕可以互换的算法来创建成功业务的,然而,状态走的是更崇高的路,它通过改变对象内部的状态来帮助对象控制自己的行为。 定义状态模式 先看看定义:状态模式允许对象在内部状态改变时改变它的行为,对象看起来好像修改了它的类 问题引入 自动糖果售卖机,糖果机的控制器需要的工作流程如下图 状态机101
阅读全文
摘要:需求分析 餐厅的菜单管理系统需要有煎饼屋菜单和披萨菜单。现在希望在披萨菜单中能够加上一份餐后甜点的子菜单。 我们需要一下改变: 需要某种树形结构,可以容纳菜单、子菜单和菜单项; 需要确定能够在每个菜单的各个项之间游走,而且至少像用迭代器一样方便; 需要能够更有弹性地在菜单项之间游走。比方说,可能只需
阅读全文
摘要:迭代器模式提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。 新的餐厅想用煎饼屋菜单当作早餐的菜单,使用餐厅的菜单当做午餐的菜单。煎饼屋使用ArrayList记录他的菜单项,而餐厅使用的是数组。想要知道菜单列表的话就需要知道具体类型。 检查菜单项 让我们先检查每份菜单上的项目
阅读全文
摘要:模板方法模式在一个方法中定义了一个算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以在不改变算法结构的情况下,重新定义算法中的某些步骤。 设计原则: 由超类主控一切,当它们需要的时候,自然会去调用子类。(别找我,我来找你) 星巴兹咖啡冲泡法 把水煮沸 用沸水冲泡咖啡 把咖啡倒进杯子 加糖和牛
阅读全文
摘要:外观模式提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。 **最少知识原则: **只和你的密友谈话。 我们已经知道适配器模式是如何将一个类的接口转换成另一个符合客户期望的接口的。现在我们要看一个改变接口的新模式,但是它改变接口的原因是为了简化接口。这个模
阅读全文
摘要:适配器模式将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。 面向对象适配器 假设已有一个软件系统,你希望它能和一个新的产商类库搭配使用,但是这个新产商所设计出来的接口,不同于旧产商的接口: 你不想改变现有的代码,解决这个问题(而且你也不能改变产商的代码)。所以该怎
阅读全文
摘要:命令模式将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。 设计自动化遥控器的API。这个遥控器有7个可编程的插槽,每个都可以指定到一个不同的家电装置。每个插槽都有对应的“打开”和“关闭”按钮。这个遥控器还具备一个整体的撤销按钮。 你要做的是创建一组
阅读全文
摘要:什么是单例模式 单例模式是一个只会被实例化一次的类,它会自行实例化,并提供可全局访问的方法。 单例模式的适用场景 一个系统中只需要存在一个的对象,例如文件管理器 需要频繁适用但创建成本太高的对象,如数据库的连接 1. 懒汉式 public class Singleton { private stat
阅读全文
摘要:简单工厂 代码实现 public class SimplePizzaFactory { public Pizza createPizza(String type) { // 使用该方法实例化新对象 Pizza pizza = null; if (type.equals("cheese")) { pi
阅读全文
摘要:**装饰者模式: **动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。 原则: 对扩展开放,对修改关闭。 问题引入: 购买咖啡时,也可以要求在其中加入各种调料,例如:蒸奶(Steamed Milk)、豆浆(Soy)、摩卡(Mocha,也就是巧克力风味)或覆盖奶泡。星巴兹
阅读全文
摘要:实现鸭子的行为 在此,我们有两个接口,FlyBehavior和QuackBehavior,还有它们对应的类,负责实现具体的行为: 这 样 的 设 计 , 可 以 让 飞 行 和 呱 呱 叫 的 动 作 被 其 他的对象复用,因为这些行为已经与鸭子类无关了。而 我 们 可 以 新 增 一 些 行 为
阅读全文
摘要:定义: 观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。 设计原则 封装变化 多用组合,少用继承 针对接口编程,不针对实现编程 为交互对象之间的松耦合设计而努力 观察者模式提供了一种对象设计,让主题和观察者之间松耦合。 气象站系统 此系统中
阅读全文

浙公网安备 33010602011771号