《Head First 设计模式》学习笔记
captxb
这个作者很懒,什么都没留下…
展开
-
chapter13_设计模式总结
OO设计原则 (1) 封装变化 (2) 多用组合, 少用继承 (3) 针对接口编程, 不针对具体的实现编程 (4) 为交互对象之间的松耦合设计而努力 (5) 类应该对扩展开放, 对修改关闭 (6) 依赖抽象, 不应该依赖具体类 (7) 类中关联的对象数量不应该过多 (8) 低层组件应该等待高层组件的调用, 不应该在高层组件和低层组件之间形成环状依赖 (9) 类应当具有单一责任 设计模式的分...原创 2019-02-25 10:06:31 · 94 阅读 · 0 评论 -
chapter14_剩下的模式
生成器模式 (1) 又称建造者模式,将构建过程和表示过程进行分离,让(参数)构建过程变得更加的简单和直观。另一种差不多的解释:建造者模式(Builder Pattern),是创造性模式之一,Builder 模式的目的则是为了将对象的构建与展示分离。Builder 模式是一步一步创建一个复杂对象的创建型模式,它允许用户在不知道内部构建细节的情况下,可以更精细地控制对象的构造流程。 (2) 示例 ...原创 2019-02-25 10:06:20 · 70 阅读 · 0 评论 -
chapter11_控制对象访问——代理模式
代理: 控制和管理访问 远程代理 (1) 在两个JVM中, 一个监视器想要远程调用另一个JVM上的对象, 那它先调用__本地__JVM的一个__代理对象__, 然后由代理对象处理所有网络通信的底层细节, 从而调用远程JVM上的对象 (2) headfirst.designpatterns.proxy.gumball中的使用RMI的示例没有测试通过 代理模式 为另一个对象提供一个替身或占...原创 2019-02-25 10:05:44 · 98 阅读 · 0 评论 -
chapter10_事务的状态——状态模式
策略模式和状态模式是极其相似的两种设计模式 在不使用状态模式前, 状态的转换需要通过多个if或者switch完成(这种做法叫做程序状态机PSM) GumballMachine.java public class GumballMachine { final static int SOLD_OUT = 0; final static int NO_QUARTER...原创 2019-02-25 10:05:30 · 77 阅读 · 0 评论 -
chapter09_管理良好的集合——迭代器与组合模式
迭代器可以让客户__遍历集合但无法窥视内部对象存储的方式__ (1) 不使用迭代器会让遍历操作无法统一接口 public static void printMenu() { PancakeHouseMenu pancakeHouseMenu = new PancakeHouseMenu(); DinerMenu dinerMenu = new DinerMen...原创 2019-02-25 10:05:17 · 95 阅读 · 0 评论 -
chapter08_封装算法——模板方法模式
(1) 模板方法定义了一个算法的步骤, 并允许子类为一个或多个步骤提供实现 (2) 示例 CaffeineBeverage.java public abstract class CaffeineBeverage { final void prepareRecipe() { boilWater(); brew();...原创 2019-02-25 10:04:56 · 135 阅读 · 0 评论 -
chapter07_随遇而安——适配器模式和外观模式
(1) 适配器的__作用__ 将一个接口转换成另一个接口 (2) 使用适配器的过程 1° 客户通过目标接口调用适配器的方法 2° 适配器使用 被适配者 的接口, 将请求转换成被适配器的一个或多个调用接口 实现了调用者和被适配者的解耦 (3) 示例 Duck.java public interface Duck { void quack(); void fly()...原创 2019-02-25 10:04:44 · 95 阅读 · 0 评论 -
chapter04_工厂模式
__工厂__处理创建对象的细节 通过静态方法创建对象叫做__静态工厂__ 静态工厂的优点是不需要创建工厂对象实例 缺点是__不能通过继承的方式改变创建方法的行为__ 简单工厂不是一种设计模式, 而是一种编程习惯 示例 public class SimplePizzaFactory { public Pizza createPizza(String type) { ...原创 2019-02-25 10:04:17 · 139 阅读 · 0 评论 -
chapter03_装饰对象——装饰者模式
设计原则: 类应该__对扩展开放__, 对修改关闭 但是, 不大可能系统中的每个地方都遵循这个原则, 所以要在设计中最有可能改变的地方应用这一原则 装饰者模式 __动态__将责任附加到对象上, 若要扩展功能, 装饰者提供了__比继承更有弹性__的替代方案 (1) 装饰者和被装饰对象有相同的__超类型Component__ (2) 每个组件Component__可以被单独使用__, 也可...原创 2019-02-25 10:03:48 · 77 阅读 · 0 评论 -
chapter02_观察者模式
观察者模式 = 主题(Subject) + 观察者(Observer) 观察者__注册__到主题上, 这样在主题数据改变时就会__通知__观察者; 主题对象会管理某些数据; 当主题对象中的数据改变时, 就会通知观察者 主题对象是被观察的一方,观察者是观察的一方,所以是主题对象(被观察)发生变化时通知观察者(观察) 观察者模式 定义了对象之间的__一对多__依赖, 这样一来当一个对象改变状态...原创 2019-02-24 08:47:14 · 85 阅读 · 0 评论 -
chapter01_设计模式入门——策略模式
设计原则: 找到应用中可能需要变化的地方, 把它们独立出来, 不要和那些不需要变化的代码混在一起 设计原则: 针对接口编程, 而不是针对实现编程 针对接口编程即针对超类型编程, 利用多态完成动态绑定 类既可以代表某种事物(内部具有状态和方法), 也可以代表一类行为(内部只有方法) 设计原则: 多用组合, 少用继承 策略模式 定义了__算法族__, 分别封装起来, 让它们之间可以...原创 2019-02-24 08:46:38 · 111 阅读 · 0 评论 -
chapter06_封装调用——命令模式
(1) 命令模式可以将__方法调用__封装起来 (2) 命令模式将__动作的请求者__ 从 __动作的执行者__对象中解耦 示例 动作的请求者:人 动作的执行者:灯 中间引入了一层__命令__,使得人和灯解耦,人只需要控制这些命令即可(类似遥控器) 所有的命令对象实现相同的命令接口, 用来执行和撤销命令 public interface Command { void ex...原创 2019-02-24 08:44:54 · 105 阅读 · 0 评论 -
chapter05_独一无二的对象——单例模式
有一些对象我们只需要一个 例如 线程池 数据库连接 缓存cache 对话框 注册表 日志对象 打印机、显卡等设备驱动程序的对象 单例模式 确保一个类只有一个实例, 并提供一个全局访问点 有的情况下是直接初始化好这个实例, 有的情况下是延迟初始化这个实例, 这取决于这个对象是否是资源敏感型的 单例模式的类也可以是一般的类, 含有自己的数据和方法。 把一个一般的类变成单例很简单, 见下...原创 2019-02-24 08:33:30 · 119 阅读 · 0 评论 -
chapter12_复合模式——MVC
复合模式不是说把几个模式组合在一起就叫复合模式, 而是组合在一起后真正产生意义, 形成解决一类问题的模板 (1) MVC模式包含视图、控制器、模型 用户和视图交互; 用户对视图做某件事情时, 视图告诉控制器; 控制器要求模型改变状态; 控制器也可能要求视图做出改变(例如某个按钮置灰); 模型状态改变时, 会__通知__视图; 视图也可以向模型__询问__状态 (2) 视图和控制器之间使用了...原创 2019-02-25 10:06:47 · 125 阅读 · 0 评论