随笔分类 -  GOF设计模式

摘要:备忘录模式Memento 场景: -Word文档编辑时,电脑死机或者断电,再次打开时,word提醒恢复之前的文档 -文件的撤回 核心: -就是保存某个对象内部状态的拷贝,这样以后就可以将该对象恢复到原先的状态 结构:-源发器类Originator(需要备忘的对象,内部可以创建备忘录,用于记录当前时刻 阅读全文
posted @ 2019-08-20 15:41 小帆敲代码 阅读(113) 评论(0) 推荐(0) 编辑
摘要:观察者模式Observer 广播机制 场景:多个观察者--被通知改变 CS的时候,人物移动坐标变化,更新每个人地图上的坐标 核心:当目标对象(Subject)的状态值改变时,需要及时告知所有观察者(Observer),使他们做出响应 开发中常见的场景: -聊天室程序中,服务器转发给所有客户端 -网络 阅读全文
posted @ 2019-08-16 21:41 小帆敲代码 阅读(146) 评论(0) 推荐(0) 编辑
摘要:状态模式state 场景:当具有许多状态并且需要频繁改变时,用这种模式 -电梯的运行:维修,正常,自动关门,自动开门,向上运行,向下运行,消防状态 -红绿灯:红灯,黄灯,绿灯 -企业或政府系统:公文的审批状态 -网上购物时,订单的状态:下单,已付款,送货中,已收货 核心:用于解决系统中复杂对象的状态 阅读全文
posted @ 2019-08-16 20:20 小帆敲代码 阅读(212) 评论(0) 推荐(0) 编辑
摘要:模板模式template method 场景:具有具体流程,但具体某一步的业务不同 到银行办理业务:排队取号,办理业务,给员工打分 请客吃饭:等待,点单,吃饭,结账 模板方法模式介绍:模板方法是编程常用的模式,它定义了一个操作中的算法骨架,将某些步骤延迟到子类中实现。这样,新的子类可以在不改变一个算 阅读全文
posted @ 2019-08-16 19:11 小帆敲代码 阅读(177) 评论(0) 推荐(0) 编辑
摘要:策略模式strategy 场景:对不同客户的不同报价策略 如果采用if else不易扩展,不符合开闭原则,可以采用策略模式 策略模式: 对应于解决某一个问题的算法族,允许其中一个算法去解决某一问题,同时可以方便的更改和扩展算法,可以由客户端决定调用那个算法 结构:抽象策略类,具体策略类(算法族),上 阅读全文
posted @ 2019-08-16 13:18 小帆敲代码 阅读(215) 评论(0) 推荐(0) 编辑
摘要:访问者模式Visitor 模式动机:对于存储在一个集合中的对象,他们可能具有不同的类型(即使有一个公共的接口),对于该集合中的对象,可以接受一类称为访问者的对象来访问,不同访问者的访问方式也不同 定义:表示一个作用于某对象结构中的各元素的操作,它使我们可以在不改变元素的类的前提下定义作用与这些元素的 阅读全文
posted @ 2019-08-16 11:26 小帆敲代码 阅读(116) 评论(0) 推荐(0) 编辑
摘要:解释器模式Interpreter -是一种不常用的设计模式 -用于描述如何构成一个简单的语言解释器,主要用于使用面向对象语言开发的编译器和解释器设计 -当我们需要开发一种新的语言时,可以考虑使用解释器模式 -尽量不要使用解释器模式,后期维护会有很大麻烦,在项目中,可以使用Jruby,Groovy,j 阅读全文
posted @ 2019-08-16 11:20 小帆敲代码 阅读(87) 评论(0) 推荐(0) 编辑
摘要:命令模式Command 将一个请求封装为一个对象,从而使我们可用不同的请求对客户参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。也称之为:动作Action模式,事务transaction模式 在命令发出,命令执行前后可以进行相关操作也具有更高的扩展性,包括多个执行者,多个命令的情况 结构: 阅读全文
posted @ 2019-08-16 11:08 小帆敲代码 阅读(114) 评论(0) 推荐(0) 编辑
摘要:中介者模式Mediator 场景:公司中各个部门需要交互,通过中介总经理进行交互 核心: 如果一个系统中对象之间的联系成网状结构,对象之间多对多,将导致关系极其复杂,这些对象统称为“同事关系” 我们可以引入一个中介者对象,使各个同事对象只和自身与中介者打交道,中介再去其他部门交互 中介者模式的本质: 阅读全文
posted @ 2019-08-15 15:21 小帆敲代码 阅读(142) 评论(0) 推荐(0) 编辑
摘要:迭代器模式Iterator /** * 自定义迭代器接口 * @author 小帆敲代码 * */public interface MyIterator { void first();//游标置于第一个 void last();//游标置于最后一个 boolean isfirst(); boolea 阅读全文
posted @ 2019-08-15 14:37 小帆敲代码 阅读(125) 评论(0) 推荐(0) 编辑
摘要:责任链模式chain of responsibility 将能够处理同一类请求的对象连成一条链,所提交的请求依次在链上传递,直到传递至有能力处理该请求的对象,不能则传给链上下一个 场景: -打牌时 -奖学金审批 -请假审批 核心:是在客户端中才成链,也可以通过配置文件或者存在数组中加载 开发中常见场 阅读全文
posted @ 2019-08-15 12:02 小帆敲代码 阅读(171) 评论(0) 推荐(0) 编辑
摘要:享元模式FlyWeight 场景:如果有很多个完全相同或者相似的对象,可以节省内存资源 核心: 享元模式以共享的方式高效地支持大量细粒对象的重用 享元对象做到共享的关键是区分了内部状态和外部状态: 内部状态:可以共享,不会随环境变化而变化(共有的部分) 外部状态:不可以共享,会随环境变化而改变(独特 阅读全文
posted @ 2019-08-14 14:10 小帆敲代码 阅读(125) 评论(0) 推荐(0) 编辑
摘要:外观模式 迪米特原则:一个软件实体应当尽可能少的与其他实体发生相互作用 外观模式核心:为子系统提供统一的入口,封装子系统的复杂性,便于客户端调用 相当于找了个代理帮你做了所有事而你只需要和代理打交道 阅读全文
posted @ 2019-08-14 13:00 小帆敲代码 阅读(97) 评论(0) 推荐(0) 编辑
摘要:装饰模式decorator 作用: -动态的为一个对象增加新功能 -装饰模式是一种用于代替继承的技术,无需通过增加子类就能扩展对象的新功能,适用对象的组合关系代替继承关系,更加灵活,同时避免类型体系的快速膨胀 角色: -Component抽象构件角色:真实对象和装饰对象具有相同的接口,这样,客户端对 阅读全文
posted @ 2019-08-11 16:00 小帆敲代码 阅读(122) 评论(0) 推荐(0) 编辑
摘要:组合模式Composite 使用组合模式的场景:把部分和整体的关系用树形结构表示,从而使客户端可以使用统一的方式处理对象和整体对象(文件和文件夹) 组合模式核心: -抽象构件(Component)角色:定义了叶子和容器的共同点 -叶子(Leaf)构件角色:无子节点 -容器(Composite)构件角 阅读全文
posted @ 2019-08-11 12:22 小帆敲代码 阅读(113) 评论(0) 推荐(0) 编辑
摘要:桥接模式 当一个问题违反单一职责原则时,及控制该产品的有多个维度,为了扩展时减少类的膨胀个数,可以选用桥接模式 避免多重继承时 例如买电脑时 桥接模式 阅读全文
posted @ 2019-08-11 09:45 小帆敲代码 阅读(131) 评论(0) 推荐(0) 编辑
摘要:动态代理 public class StarHandler implements InvocationHandler{ Star realStar; public StarHandler(Star realStar) { this.realStar = realStar; } @Override p 阅读全文
posted @ 2019-08-10 17:27 小帆敲代码 阅读(123) 评论(0) 推荐(0) 编辑
摘要:静态代理 模拟经纪人与明星开演唱会 public interface Star { /** * 面谈 */ void confer(); /** * 签合同 */ void signContract(); /** * 唱歌 */ void sing(); /** * 收尾款 */ void cole 阅读全文
posted @ 2019-08-10 17:23 小帆敲代码 阅读(150) 评论(0) 推荐(0) 编辑
摘要:代理模式 核心作用: -通过代理,控制对对象的访问 -可以详细控制机制访问某个(某类)对象的方法,在调用这个方法前做前置处理,调用这个方法后做 后置处理(AOP的微观实现) 应用场景 -安全代理:屏蔽对真是角色的直接接触(经纪人) -远程代理:通过代理类处理远程方法 -延迟加载:先加载轻量级的代理对 阅读全文
posted @ 2019-08-10 17:20 小帆敲代码 阅读(100) 评论(0) 推荐(0) 编辑
摘要:结构型模式 核心作用:是从程序的结构上实现松耦合,从而可以扩大整体的 类结构,用来解决更大的问题 适配器模式adapter 实际生活中的例子:转换器 适配器的两种方式: 1,类适配器(继承) /**需要适配的对象 * @author 小帆敲代码 * */public class Adaptee { 阅读全文
posted @ 2019-08-10 09:15 小帆敲代码 阅读(115) 评论(0) 推荐(0) 编辑

点击右上角即可分享
微信分享提示