
设计模式之禅
蓋亞光
积跬步以至千里
展开
专栏收录文章
- 默认排序
- 最新发布
- 最早发布
- 最多阅读
- 最少阅读
-
代理模式及动态代理
代理模式代理模式是一种常见的设计模式。代理类,委托类实现相同的抽象接口,一个代理类中包含一个委托类的对象,与委托类相关联;代理类主要负责为委托类预处理消息,把消息转发给委托类,及事后处理消息;代理类本身不实现真正的服务而是调用代理类的对象完成相关服务。源代码1.接口类public interface AbstractObject{public void operation(){};}2.委托类p原创 2016-08-14 11:56:59 · 338 阅读 · 0 评论 -
备忘录模式(Cemento Pattern)
一、定义 在不破坏封装性的前提下, 捕获一个对象的内部状态, 并在该对象之外保存这个状态。 这样以后就可将该对象恢复到原先保存的状态。 二、示例 相信我们在工作中都用过word编辑器吧,word中有一项功能,当我们的编辑出错时,Ctrl+Z可以使我们回退到以前的文本,这样我们就可以在以前文本的基础上继续编辑,而不需要从头开始编辑。现在我们应用备忘录模式实现一下这个功能。 类图如下: 首原创 2017-05-24 18:24:57 · 440 阅读 · 0 评论 -
门面模式(Facade Pattern)
在以前信息不是很发达的时代,人们最快捷的信息往来方式就是通过书信,一般我们写一封书信,一般要经过一下几个步骤:在信纸上写上新的内容在信封上写上收件人的姓名,地址信息将信装进信封,贴上邮票把信送给邮局投递用类图表示就如下所示: 首先定义一个接口,规范写信的方法:package facade;/** * 写信接口 * @author 77473 * */public interf原创 2017-05-22 22:57:37 · 509 阅读 · 0 评论 -
策略模式(Strategy Pattern)
一、定义: 定义一组算法, 将每个算法都封装起来, 并且使它们之间可以互换。 二、场景: 根据用户给出的参数,计算出运算结果。 三、代码: Calculator.class/** * 抽象接口,定义每个策略或算法必须具有的方法和属性 */public interface Calculator { public int exec(int a,int b);//抽象方法,传原创 2017-04-01 11:59:20 · 292 阅读 · 0 评论 -
建造者模式
一、定义: 将一个复杂对象的构建与它的表示分离, 使得同样的构建过程可以创建不同的表示。 二、类图: 三、代码: CarModel.class/** * 汽车抽象模板,定义汽车类执行顺序的基本方法,并实现控制汽车执行顺序的模板方法 */public abstract class CarModel { private ArrayList<String> sequenc原创 2017-03-13 18:02:24 · 333 阅读 · 0 评论 -
装饰者模式
一、定义: 动态地给一个对象添加一些额外的职责。就增加功能来说, 装饰模式相比生成子类更为灵活。 二、事例: 话说,小时候我学习不好,每次考试都是倒数前几名,刚开始还好,成绩单发了就发了,也不用家长签名,但后来,不知哪个xxx想出来个办法,每张成绩单都要家长签名,这可愁了我们这些学习差的孩子,签了挨家长打,不签挨学校大。但,上有政策,下有对策,正好我聪明机智,成绩单虽然是死的,但表达方式原创 2017-03-22 16:48:31 · 340 阅读 · 0 评论 -
模板方法模式
一、定义: 定义一个操作中的算法的框架, 而将一些步骤延迟到子类中。 使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 二、类图: AbstractClass叫做抽象模板, 它的方法分为两类: ● 基本方法 基本方法也叫做基本操作, 是由子类实现的方法, 并且在模板方法被调用。 ● 模板方法可以有一个或几个, 一般是一个具体方法, 也就是一个框架, 实现对基本原创 2017-03-12 20:47:59 · 286 阅读 · 0 评论 -
责任链模式
一、定义: 使多个对象都有机会处理请求, 从而避免了请求的发送者和接受者之间的耦合关系。 将这些对象连成一条链, 并沿着这条链传递该请求, 直到有对象处理它为止。 二、案例: 古代妇女都要遵守三从四德的礼仪规范,所谓三从就是:未嫁从父,既嫁从夫,夫死从子。设想,现有一古代女子,想粗去耍,若女子未婚,则她要征求父亲的同意,若已出嫁,则要征求丈夫的同意,若不幸丈夫亡故了,则要征求儿子的同意。原创 2017-03-21 11:56:22 · 332 阅读 · 0 评论 -
六大设计原则(上)
一、单一职责原则(Single Responsibility Principle,SRP) 定义:应该有且仅有一个原因引起类(接口)的变更。 理解:我们在设计接口的时候应该尽量保持一个接口只负责一种职责,类通过实现不同的接口完成不同的功能。这样,一个接口修改只对相应的实现类有影响,而不会影响到其它的类。 好处: ● 类的复杂性降低, 实现什么职责都有清晰明确的定义; ● 可读性提高, 复杂原创 2017-03-07 21:38:27 · 708 阅读 · 0 评论 -
单例模式
一、定义: 确保某一个类只有一个实例, 而且自行实例化并向整个系统提供这个实例。 二、类图: 三、代码:懒汉式单例/** * 懒汉式单例 */public class Singleton { private static Singleton mInstance=null;//唯一实例 /** * 私有构造方法,保证外部无法通过new关键字进行实例化原创 2017-03-10 14:13:33 · 574 阅读 · 0 评论 -
命令模式
一、定义: 将一个请求封装成一个对象, 从而让你使用不同的请求把客户端参数化, 对请求排队或者记录请求日志, 可以提供命令的撤销和恢复功能。 二、类图: 三、代码: Group.class/** * 组抽象类,定义各组的基本行为 */public abstract class Group { public abstract void find();//找到对应的组 p原创 2017-03-20 11:54:07 · 284 阅读 · 0 评论 -
中介者模式
一、定义: 用一个中介对象封装一系列的对象交互, 中介者使各对象不需要显示地相互作用, 从而使其耦合松散, 而且可以独立地改变它们之间的交互。 二、类图: 三、代码: AbstractMediator.class/** * 抽象终结者类 */public abstract class AbstractMediator { protected Purchase pu原创 2017-03-19 13:54:27 · 326 阅读 · 0 评论 -
原型模式
一、定义: 用原型实例指定创建对象的种类, 并且通过拷贝这些原型创建新的对象。 通俗理解:不通过new关键字来产生一个对象, 而是通过对象复制来实现的模式就叫做原型模式。 二、类图: 三、代码: MailTemplate.class/** * 邮件模板类,定义邮件中的公共属性 */public class MailTemplate { private Strin原创 2017-03-18 12:56:00 · 462 阅读 · 0 评论 -
六大设计原则(下)
四、接口隔离原则 定义: 类间的依赖关系应该建立在最小的接口上。 理解:建立单一接口, 不要建立臃肿庞大的接口。 再通俗一点讲: 接口尽量细化, 同时接口中的方法尽量少。 与单一职责原则的区别:接口隔离原则与单一职责的审视角度是不相同的, 单一职责要求的是类和接口职责单一, 注重的是职责, 这是业务逻辑上的划分, 而接口隔离原则要求接口的方法尽量少。 例如一个接口的职责可能包含10个方法, 这原创 2017-03-08 18:10:33 · 625 阅读 · 0 评论 -
观察者模式
概述观察者模式有时也称发布/订阅模式,观察者模式定义了一对多的依赖关系,多个观察者对象同时监听一个主题对象,当主题对象的状态发生改变时,同时每个观察者对象更新自己的状态。组成抽象主题角色:把所有对观察者对象的引用保存在一个集合中,每个抽象主题角色都可以有任意数量的观察者。抽象主题提供一个接口,可以增加和删除观察者角色。一般用一个抽象类和接口来实现。抽象观察者角色:为所有具体的观察者定义一个接口,在得原创 2016-08-14 23:33:05 · 584 阅读 · 0 评论 -
工厂模式
一、简单工厂模式由一个工厂类根据不同的参数创建不同的实体对象。代码:IPerson.javapackage com.example.helloworld;/** * Created by Administrator on 2016/8/18. */public interface IPerson { public void sayHello();}Japanese.javapacka原创 2016-08-18 23:43:36 · 674 阅读 · 0 评论 -
组合模式(Composite Pattern)
在项目开发中,有时候我们会遇到将一个对象组合成一个树形结构,来表示“整体-部分”的层次关系,但用户在操作的时候,不需要区分组合对象(树枝节点,包含子节点)或单个对象(叶子节点,不包含子节点),保持一致的操作体验。这时候我们就可以利用组合模式来实现我们的应用。 定义:将对象组合成树形结构以表示“部分-整体”的层次结构, 使得用户对单个对象和组合对象的使用具有一致性。 一、透明实现 1、在组合模式原创 2017-05-16 22:49:11 · 439 阅读 · 0 评论