![](https://img-blog.csdnimg.cn/20201014180756928.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
GOF23设计模式
文章平均质量分 79
职业炮灰
这个作者很懒,什么都没留下…
展开
-
备忘录模式
备忘录模式一、概述就是保存某个对象内部状态的拷贝,这样以后就可以将该对象恢复到 原先的状态。结构源发器类Originator备忘录类Memento负责人类CareTaker开发中常见的场景棋类游戏中的,悔棋普通软件中的,撤销操作数据库软件中的,事务管理中的,回滚操作Photoshop软件中的,历史记录二、代码实现源发器类public class Em...原创 2018-11-10 11:30:35 · 144 阅读 · 0 评论 -
解释器模式与访问者模式
解释器模式与访问者模式一、解释器模式是一种不常用的设计模式用于描述如何构成一个简单的语言解释器,主要用于使用面向对象语言开发的 编译器和解释器设计。当我们需要开发一种新的语言时,可以考虑使用解释器模式。尽量不要使用解释器模式,后期维护会有很大麻烦。在项目中,可以使用 Jruby,Groovy、java的js引擎来替代解释器的作用,弥补java语言的不足。开发中常见的场景EL表达式...原创 2018-11-10 11:41:09 · 337 阅读 · 0 评论 -
GOF23设计模式总结
GOF23设计模式总结一、GOF23中设计模式一览表二、构建型模式单例模式保证一个类只有一个实例,并且提供一个访问该实例的全局访问点。工厂模式简单工厂模式 :用来生产同一等级结构中的任意产品。(对于增加新的产品,需要修改已有代码)工厂方法模式 :用来生产同一等级结构中的固定产品。(支持增加任意产品)抽象工厂模式 :用来生产不同产品族的全部产品。(对于增加新的产品,无能为...原创 2018-11-10 11:50:38 · 828 阅读 · 0 评论 -
静态代理与装饰模式
静态代理与装饰模式一、静态代理代理模式是指,为其他对象提供一种代理以控制对这个对象的访问。在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户类和目标对象之间起到中介的作用。换句话说,使用代理对象,是为了在不修改目标对象的基础上,增强主业务逻辑客户类真正的想要访问的对象是目标类对象,但客户类真正可以访问的对象是代理对象。客户类对目标对象的访问是通过访问代理对象来实现...原创 2018-11-07 17:54:39 · 1153 阅读 · 2 评论 -
适配器模式
适配器模式适配器模式的定义是,Convert the interface of a class into another interface clients expect,将某个类的接口转换为接口客户所需的类型。换句话说,适配器模式解决的问题是,使得原本由于接口不兼容而不能一起工作、不能统一管理的那些类可以在一起工作、可以进行统一管理。这里举个适配器模式的例子:这里有厨师接口 ICoo...原创 2018-11-07 18:54:36 · 7485 阅读 · 2 评论 -
单例设计模式
单例设计模式一、单例设计模式概述作用保证一个类只有一个实例,并且提供一个访问该实例的全局访问点。常见应用场景Windows的Task Manager(任务管理器)就是很典型的单例模式项目中,读取配置文件的类,一般也只有一个对象。没有必要每次使用配置文件数据,每次new一个对象去读取。数据库连接池的设计一般也是采用单例模式,因为数据库连接是一种数据库资源。Application ...原创 2018-11-05 17:52:40 · 114 阅读 · 0 评论 -
桥接模式
桥接模式一、概述桥接模式可以取代多层继承的方案。 多层继承违背了单一职责原则, 复用性较差,类的个数也非常多。桥接模式可以极大的减少子类的个数,从而降低管理和维护的成本。桥接模式极大的提高了系统可扩展性,在两个变化维度中任意扩展一 个维度,都不需要修改原有的系统,符合开闭原则。就像一个桥,将两个变化维度连接起来。 各个维度都可以独立的变化。 故称之为:桥模式二、使用场景商城系统中常...原创 2018-11-08 16:32:17 · 197 阅读 · 0 评论 -
组合模式
组合模式一、概述组合模式为处理树形结构提供了完美的解决方案,描述了如何将容器和叶子进行递归组 合,使得用户在使用时可以一致性的对待容器和叶子。当容器对象的指定方法被调用时,将遍历整个树形结构,寻找也包含这个方法的成员, 并调用执行。其中,使用了递归调用的机制对整个结构进行处理。使用场景把部分和整体的关系用树形结构来表示,从而使客户端可以使用统一的方式处理部分对 象和整体对象杀毒软件...原创 2018-11-08 16:59:59 · 200 阅读 · 0 评论 -
外观模式
外观模式一、概述隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。迪米特法则(最少知识原则):一个软件实体应当尽可能少的与其他实体发生相互作用。二、代码举例注册公司各个复杂的步骤public interface 工商局 { void checkName(); //核名}...原创 2018-11-08 17:24:02 · 171 阅读 · 0 评论 -
观察者模式
观察者模式一、概述观察者模式主要用于1:N的通知。当一个对象(目标对象Subject或Objservable)的状态变化时,他需要及时告知一系列对象(观察者对象,Observer),令他们作出响应。应用场景网站上,很多人订阅了”java主题”的新闻。当有这个主题新闻时,就 会将这些新闻发给所有订阅的人。大家一起玩CS游戏时,服务器需要将每个人的方位变化发给所有的客 户。上面这些场景...原创 2018-11-10 11:19:46 · 220 阅读 · 0 评论 -
状态模式
状态模式一、概述用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题。结构Context环境类:环境类中维护一个State对象,他是定义了当前的状态。State抽象状态类ConcreteState具体状态类:每一个类封装了一个状态对应的行为应用场景网上购物时,订单的状态:下单、已付款、已发货、送货中、已收货。酒店系统中,房间的状态变化: 已预订、已入住、空闲。...原创 2018-11-10 10:43:44 · 293 阅读 · 0 评论 -
工厂模式与抽象工厂模式
工厂模式与抽象工厂模式一、工厂模式概述实现了创建者和调用者的分离。分类有:简单工厂模式,工厂方法模式,抽象工厂模式。面向对象设计的基本原则:OCP(开闭原则,Open-Closed Principle):一个软件的实体应当对扩展开 放,对修改关闭。DIP(依赖倒转原则,Dependence Inversion Principle):要针对接口编程, 不要针对实现编程。LoD(迪米特...原创 2018-11-06 20:45:52 · 200 阅读 · 0 评论 -
建造者模式与原型模式
建造者模式与原型模式一、建造者模式建造者模式概述建造者模式分离了对象子组件。子组件单独构造(由Builder来负责)然后再装配(由Director负责)。 从而可以构 造出复杂的对象。这个模式适用于:某个对象的构建过程复杂的情况下使用。由于实现了构建和装配的解耦。不同的构建器,相同的装配,也可以做出不同的对象; 相同的构建器,不同的装配顺序也可以做出不同的对象。也就是实现了构建算法、装...原创 2018-11-06 21:27:58 · 328 阅读 · 0 评论 -
责任链模式
责任链模式一、概述将能够处理同一类请求的对象连成一条链,所提交的请求沿着链传递,链上的对象逐个判断是否有能力处理该请求,如果能 则处理,如果不能则传递给链上的下一个对象。应用场景公司里面,报销个单据需要经过流程:申请人填单申请,申请给经理-> 小于1000,经理审查->超过1000,交给总经理审批->总经理审批通过公司里面,请假条的审批过程: 如果请假天数小于3天,...原创 2018-11-09 16:34:24 · 251 阅读 · 0 评论 -
迭代器模式
迭代器模式一、概述提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。又称为:游标cursor模式聚合对象:存储数据 ,迭代器:遍历数据。二、代码简单实现自定义迭代器接口public interface MyIterator { void first(); //将游标指向第一个元素 void next(); //将游标指向下一个元素 boolean ...原创 2018-11-09 16:47:59 · 146 阅读 · 0 评论 -
中介者模式
中介者模式一、概述如果一个系统中对象之间的联系呈现为网状结构,对象之间存在大量多对多关系,将导致关系极其复杂,这些对象称为同事对象我们可以引入一个中介者对象,使各个同事对象只跟中介者对象打交道,将复杂的网络结构化解为如下的星型结构本质解耦多个同事对象之间的交互关系。每个对象都持有中介者对象的引 用,只跟中介者对象打交道。我们通过中介者对象统一管理这些交互 关系应用场景假如没有总经...原创 2018-11-09 17:16:24 · 273 阅读 · 0 评论 -
命令模式
命令模式一、概述将一个请求封装为一个对象,从而使我们可以用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。也称之为:动作Action模式,事物transaction模式。结构Command抽象命令类。ConcreteCommand具体命令类。Invoker调用者/请求者:请求的发送者,它通过命令对象来执行请求。一个调用者并不需要在设计时确定其接受者,因...原创 2018-11-09 18:11:30 · 138 阅读 · 0 评论 -
动态代理
动态代理一、概述动态代理是指,程序在整个运行过程中根本就不存在目标类的代理类,目标对象的代理对象只是由代理生成工具(如代理工厂类)在程序运行时由JVM根据反射机制与动态生成字节码动态生成的。代理对象的代理关系在程序运行时才确立。所谓的反射就是在加载完类之后,在堆内存中,就产生了一个 Class 类型的对象(一个类只有一个Class 对象),这个对象就包含了完整的类的结构信息。我们可以通过这...原创 2018-11-07 16:42:36 · 269 阅读 · 0 评论 -
策略模式
策略模式一、概述策略模式对应于解决某一个问题的一个算法族,允许用户从该算法族 中任选一个算法解决某一问题,同时可以方便的更换算法或者增加新 的算法。并且由客户端决定调用哪个算法。本质:分离算法,选择实现。应用场景:某个市场人员接到单后的报价策略(CRM系统中常见问题)。报价策略 很复杂,可以简单作如下分类:普通客户小批量报价普通客户大批量报价老客户小批量报价老客户大批量报价具...原创 2018-11-10 09:55:13 · 234 阅读 · 0 评论 -
模板方法模式
模板方法模式一、概述模板方法模式是编程中经常用到的模式。它定义了一个操作中的算法骨架,将某些步骤延迟到子类中实现。这样,新的子类可以在不改变一个算法结构的前提下重新定义该算法的某些特定步骤。处理某个流程的代码已经都具备,但是其中某个节点的代码暂时不能确定。因此,我们采用模板方法模式,将这个节点的代码实现转移给子类完成。即:处理步骤父类中定义好,具体实现延迟到子类中定义。应用场景实现一个...原创 2018-11-10 10:15:12 · 153 阅读 · 0 评论 -
享元模式
享元模式一、概述内存属于稀缺资源,不要随便浪费。如果有很多个完全相同或相似的 对象,我们可以通过享元模式,节省内存。享元模式以共享的方式高效地支持大量细粒度对象的重用。享元对象能做到共享的关键是区分了内部状态和外部状态。内部状态:可以共享,不会随环境变化而改变外部状态:不可以共享,会随环境变化而改变应用场景围棋软件设计,每个围棋棋子都是一个对象, 有颜色、形状、大小等属性是...原创 2018-11-08 17:45:44 · 181 阅读 · 0 评论