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