设计模式的学习之路
Head First系列学习笔记。
从程序猿到程序员
努力吧骚年
展开
-
设计模式学习笔记——策略模式
策略模式——概念 定义了算法族,分别封装起来,让它们之间可以相互替换,此模式让算法的变化独立于使用算法的客户。 设计原则 1、找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。 “把会变化的部分取出来并封装起来,以便以后可以轻易地改动或扩充此部分,而不影响不需要变化的其他部分”。 2、针对接口编程,而不是针对实现编程。 针对接口编程,关键在于多...原创 2018-03-04 13:55:27 · 187 阅读 · 0 评论 -
设计模式学习笔记——观察者模式
定义 观察者模式定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新。 设计原则 为了交互对象之间的松耦合设计而努力。 常见实例 监听器 简单例子 1、自定接口实现。 1、subject主题(被观察者)接口,代码如下: public interface Subject { void addObserv...原创 2018-03-08 15:02:00 · 235 阅读 · 0 评论 -
设计模式学习笔记——装饰者模式
设计原则 类应该对扩展开放,对修改关闭。 定义 装饰者模式动态地将责任附加到对象上。若要扩展功能,装饰者提供了比继承更有弹性的替代方案。 实现方案 1、装饰者模式通常情况下使用抽象类来实现类型匹配,当然也可以使用接口来实现类型匹配。(所谓类型匹配就是使用一个通用的类型来保存变量,调用该类型中有的方法) 2、装饰类中要有一个被装饰者的引用。 简单例子 抽象类(用于类型匹配...原创 2018-03-08 21:38:16 · 186 阅读 · 0 评论 -
设计模式学习笔记——工厂模式
问题提出 当某事物具有类型、参数时,我们需要对类型或者参数定制化地去实例化一个对象。若在逻辑代码中使用if判断或者switch选择,当新增加参数或者类型时,我们不得不在每个实例化的地方去修改增加这个定制化的对象。 这就导致了代码的不可维护性,也就失去了对扩展开放,对修改关闭的原则。 优化思想 找到经常变化的部分,把它拿出来放到另一个专用的类去管理,在原来的地方只关心它返回的对象类型,使...原创 2018-03-26 12:32:25 · 170 阅读 · 0 评论 -
设计模式学习笔记——单例模式
应用场景 用来管理共享的资源,例如数据库连接或者线程池,在全局仅有一个实例。 定义 单例模式确保一个类只有一个实例,并提供一个全局访问点。 延迟实例化(懒汉式) 懒汉式,顾名思义就是比较懒,不用的时候不实例化,用到它的时候再实例化,这对资源敏感的对象特别重要。 public class LazyBoy{ private static LazyBoy instance...原创 2018-04-01 12:43:06 · 186 阅读 · 0 评论 -
设计模式学习笔记——命令模式
设计目的 将”动作的请求者”和”动作的执行者”解耦,甚至他们互相不知道对方的存在。 实现方法 设计一个接口,该接口声明了一些方法(execute/undo),所有的命令都实现了该接口,并以该接口为类型在各类中进行传递,“动作的执行者”只要知道它实现了该接口,就可以调用该命令的方法。 命令模式 将请求封装成对象,这可以让你使用不同的请求、队列、或者日志请求来参数化其他对象。命令模式也可以支...原创 2018-06-12 10:19:02 · 135 阅读 · 0 评论 -
设计模式学习笔记——适配器模式/外观模式
适配器模式 定义:将一个类的接口,转换成客户期望的另一个接口。适配器让原本接口不兼容的类可以合作无间。 代码示例 旧系统使用接口A,现在接口升级,需求接口B。 1、旧接口 public interface InterfaceA { void execute(); void undo(); } 2、旧接口实体类 public class ConcretedCla...原创 2018-06-12 15:34:49 · 191 阅读 · 0 评论 -
设计模式学习笔记——模板方法模式
概述 模板方法定义了一个算法的步骤,并允许子类为一个或多个步骤提供实现。 认识模板方法 选自Head First一个例子,很好理解该模式。 需求:咖啡店有两个饮料冲泡法,分别为咖啡冲泡法、茶叶冲泡法。 咖啡冲泡法: (1)把水煮沸 (2)用沸水冲泡咖啡 (3)把咖啡倒进杯子 (4)加糖和牛奶 public class Coffee void prepareRecipe(){ ...原创 2018-06-30 17:13:53 · 170 阅读 · 0 评论 -
设计模式学习笔记——迭代器模式
迭代器模式 顾名思义,就是将遍历等操作封装起来,对外统一成一个接口,获取遍历器,方便用户代码使用。 概念定义:提供一种方法顺序访问一个聚合对象中的各个元素,而又不暴露其内部的表示。 小例子 例子摘自head first,帮助理解。 餐厅一 餐厅一的现有程序,使用ArrayList作为菜单的数据结构,如下: public class PancakeHouseMenu { p...原创 2018-07-10 15:43:34 · 246 阅读 · 0 评论 -
设计模式学习笔记——组合模式
定义 组合模式允许你将对象组合成树形结构来表现”整体/部分”层次结构。组合能让客户以一致的方式处理个别对象以及对象组合。 小例子 树形结构的菜单表示,菜单下有子菜单或者菜单项,规定他们都属于组件Component,它是一个接口。子菜单作为树的分支点Composite,菜单项作为树的叶节点Leaf。 ...原创 2018-07-16 21:45:27 · 182 阅读 · 1 评论