设计模式
文章平均质量分 84
sscout
这个作者很懒,什么都没留下…
展开
-
简单工厂
定义 由一个工厂对象决定创建出哪一种产品类的实例,又叫做静态工厂方法(Static Factory Method)模式。 通俗讲,就是由应用层告诉工厂要生产产品的信息,然后工厂创建对应产品。 类型 创建型,但不属于GOF23种设计模式。 适用场景 工厂类负责创建的对象比较少; 客户端(应用层)只知道传入工厂类的参数,对于如何创建对象(逻辑)不关心。 优点 只需要传入一个正确的参数,...原创 2019-07-19 20:05:58 · 100 阅读 · 0 评论 -
桥接模式
定义 将抽象部分与它具体实现部分分离,使它们能够独立的变化。通过组合的方式建立两个类之间联系。 抽象化:抽象化就是忽略一些信息,把不同的实体当作同样的实体对待。在面向对象中,将对象的共同性质抽取出来形成类的过程即为抽象化的过程。 实现化:针对抽象化给出的具体实现,就是实现化,抽象化与实现化是一对互逆的概念,实现化产生的对象比抽象化更具体,是对抽象化事物的进一步具体化的产物。 打个比方,一个...原创 2019-08-09 22:59:36 · 87 阅读 · 0 评论 -
备忘录模式
定义 在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。诸如文本编辑器的撤销,虚拟机的快照,浏览器回退都采用了相同机制。 类型 行为型 适用场景 保存及恢复数据相关业务场景 需要回退的时候 发起人不需要管理和保存其内部状态的各个备份,所有状态信息都保存在备忘录中,并由管理者进行管理,这符合单一职责原则。 优点 为用...原创 2019-08-14 21:26:18 · 80 阅读 · 0 评论 -
命令模式
定义 将请求封装成对象,这样方便将命令对象进行储存、传递、调用、增加与管理。对于接收者来说,它都可以识别这些请求对象,然后执行不同的行为。 命令模式解决了应用程序中对象的职责以及它们之间的通信方式,简而言之,就是命令模式可以使发送者和接收者解耦,发送者和接收者之间没有直接的引用关系,发送命令的对象只知道如何发命令,不知道如何执行。 日常生活中,类似命令模式的例子,是开关。将开关和点灯连接起来...原创 2019-08-14 22:24:19 · 159 阅读 · 0 评论 -
代理模式
定义 为其他对象提供一种代理,以控制对这个对象的访问,代理对象在客户端和目标对象之间起到中介的作用。即为指定的目标对象提供一个代理商,由代理商来完成对目标对象的操作。 打个比方,帮别人做事情,自己就是别人的代理;让别人帮自己做事情,别人就是自己的代理。 代理又分为静态代理,动态代理,CGLib代理。 类型 结构型 适用场景 保护目标对象。在某些情况下,一个客户类不想或者不能直接引用一...原创 2019-08-10 22:21:30 · 164 阅读 · 0 评论 -
中介者模式
定义 定义一个 封装一组对象如何交互的 对象。主要解决多个对象和类之间的通信复杂度,主要通过一个中介类接受所有消息,然后再进行转发。 通过使封装交互对象的明确的相互引用来促进松散耦合,并允许独立地改变它们的交互。这样可以降低多个对象和类之间的通信复杂度,由原来的网状接口转变为星型结构。 类型 行为型 适用场景 系统中对象之间存在复杂的引用关系,产生的相互依赖关系结构混乱且难以理解 ...原创 2019-08-14 23:15:11 · 91 阅读 · 0 评论 -
模板模式
定义 定义了一个算法的骨架,并允许子类为一个或多个步骤提供实现。模板方式使得子类在不改变算法结构的情况下,重新定义算法的某些步骤。是基于继承的代码复用的基本技术。 简而言之,完成一件事情,有固定的数个步骤,但是会有步骤根据对象的不同,而实现细节不同;就可以在父类中定义一个完成该事情的总方法,按照完成事件需要的步骤去调用其每个步骤的实现方法。固定不变的步骤可以抽取到父类中,需要变化的步骤定义为抽...原创 2019-08-11 15:42:44 · 482 阅读 · 0 评论 -
迭代器模式
定义 提供一种方法,顺序访问一个集合对象中的各个元素,而又不暴露该对象的内部表示。 合理组织数据的结构以及相关操作是程序设计的一个重要方面,比如在程序设计中经常会使用诸如链表、散列表等数据结构。链表和散列表等数据结构都是可以存放若干个对象的集合,其区别是按照不同的方式进行存储对象。我们希望无论何种集合,应当允许程序以一种统一的方式遍历集合中的对象,而不需要知道这些对象在集合中是如何表达及存储的...原创 2019-08-11 16:27:30 · 236 阅读 · 0 评论 -
责任链模式
定义 使多个对象都有处理请求的机会,从而避免了请求的发送者和接收者之间的耦合关系。将这些对象串成一条链,并沿着这条链一直传递该请求,直到有对象处理它为止。 简而言之,就是为请求创建一个接收此次请求对象的链,这些对象可处理请求,也可以传递请求,知道没有对象处理该请求为止。web中的过滤器就采用了这种设计模式来处理request请求。 类型 行为型 适用场景 一个请求的处理需要多个对象当中...原创 2019-08-15 18:41:39 · 71 阅读 · 0 评论 -
访问者模式
定义 封装作用与某种数据结构(如List/Set/Map等)中的各元素的操作。它可以使你在不改变各元素的类的前提下,定义作用于这些元素的操作。但需要这些被操纵的元素相对稳定。 简而言之,就是专门有个对象来访问某种数据结构的元素,且不改变这些元素。使元素本身与操作分离。 访问者模式能把处理方法从数据结构中分离出来,并可以根据需要增加新的处理方法,且不用修改原来的程序代码与数据结构,这提高了程序...原创 2019-08-15 21:46:54 · 87 阅读 · 0 评论 -
状态模式
概述 在软件开发过程中,应用程序可能会根据不同的情况作出不同的处理。最直接的解决方案是将这些所有可能发生的情况全都考虑到。然后使用if... ellse语句来做状态判断来进行不同情况的处理。但是对复杂状态的判断就显得“力不从心了”。随着增加新的状态或者修改一个状态(if else(或switch case)语句的增多或者修改)可能会引起很大的修改,而程序的可读性,扩展性也会变得很弱。维护也会很麻...原创 2019-08-15 22:50:38 · 90 阅读 · 0 评论 -
组合模式
定义 将对象组合成树形结构以表示 "部分-整体" 的层次结构。 组合模式使客户端对对单个对象和组合对象保持一致的方式处理。 组合模式用来表示部分与整体的层次结构(类似于树结构),而且也可以使用户对单个对象(叶子节点)以及组合对象(非叶子节点)的使用具有一致性,一致性的意思就是说,这些对象都拥有相同的接口。 如文件系统,书的目录,网站的菜单都可以使用组合模式。 简单来说,组合模式能让我们能用...原创 2019-08-09 20:52:40 · 200 阅读 · 0 评论 -
观察者模式
定义 定义了对象之间的一对多依赖,让多个观察者对象同时监听某一个主题对象,当主题对象发生变化时,它的所有依赖着(观察者)都会收到通知并更新。 生活中这样的机制就由很多,比如微信朋友圈在你点赞后,如果有别人在下面评论,那么你也会收到通知,在点下赞后,你就成为了观察者。上面的定义还是很容易理解的。 类型 行为型 适用场景 关联行为场景,建立一套触发机制 优点 观察者与被观察者之间建立了...原创 2019-08-13 21:37:43 · 90 阅读 · 0 评论 -
工厂方式
定义: 定义一个创建对象的接口,但让实现这个接口的类来决定实例化哪个类,即让类的实例化推迟到子类中进行。 与简单工厂相比,工厂类不再负责所有产品的创建,而只是给出具体工厂必须实现的接口,这样工厂方法模式在添加新产品的时候就不修改工厂类逻辑而是添加新的工厂子类,符合开放封闭原则,克服了简单工厂模式中缺点。 类型: 创建型 适用场景: 创建对象需要大量重复的代码 客户端(应用层)不依赖于...原创 2019-07-19 22:37:36 · 116 阅读 · 0 评论 -
抽象工厂
定义: 抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口,且访问类无须指定所要产品的具体类就能得到同族的不同等级的产品的模式结构。 抽象工厂模式是工厂方法的进一步深化,在这个模式中的工厂类不单单可以创建一种产品,而是可以创建一组产品。 类型: 创建型 适用场景 客户端(应用层)不依赖于产品类实例如何被创建,实现等细节; 强调一系列相关的产品对象(属于同一产品族)一起适用创建对象...原创 2019-07-24 23:24:22 · 404 阅读 · 0 评论 -
单例模式
定义 保证一个类仅有一个实例,并提供一个全局访问点 类型 创建型 适用场景 想确保任何情况下都绝对只有一个实例 优点 在内存中仅有一个实例,减少了内存开销 可以避免对资源的多重占用 设置全局访问点,控制访问 缺点 没有接口,扩展困难 实例一 懒汉式 方式一1.1 public class LazySingleton { private static Laz...原创 2019-07-31 11:33:01 · 119 阅读 · 0 评论 -
原型模式
定义 指原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象 不需要知道任何创建的细节,不调用构造函数 类型 创建型 适用场景 类初始化消耗较多资源 new产生的一个对象需要繁琐的过程 构造函数比较复杂 循环体中生产大量对象时 优点 原型模式性能比直接new一个对象性能高 简化创建过程 缺点 必须配备克隆方法 对克隆复杂对象或对克隆出的对象进行复杂改造时,容易引入风...原创 2019-07-31 15:35:12 · 78 阅读 · 0 评论 -
外观模式
定义 又叫门面模式,提供了一个统一的接口,用来访问子系统的一群的接口 外观模式定义一个高层接口,让子系统更容易使用 类型 结构型 适用场景 子系统越来越复杂,增加外观模式提供简单调用接口 构建多层系统结构,利用外观对象作为每层的入口,简化层间调用接口 优点 简化了调用过程,无须了解深入子系统,防止带来风险 减少系统依赖,松散耦合 更好的划分访问层次 符合迪米特法则 缺点 增加...原创 2019-07-31 20:48:41 · 80 阅读 · 0 评论 -
建造者模式
定义 将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。创建者模式隐藏了复杂对象的创建过程,它把复杂对象的创建过程加以抽象,通过子类继承或者重载的方式,动态的创建具有复合属性的对象。 通俗的讲,建造者模式就是将一个复杂的对象分解为多个简单的对象,然后一步一步构建而成。产品的组成部分是不变的,但每一部分是可以灵活选择的。 类型 创建型 使用场景 如果一个对象有非常...原创 2019-07-26 23:26:37 · 107 阅读 · 0 评论 -
装饰者模式
定义 在不改变原有对象的基础之上,将功能附加到对象上 提供了比继承更有弹性的替代方案(扩展原有对象功能) 类型 构建型 适用场景 扩展一个类的功能或给一个类添加附加职责 动态地给一个对象添加功能,这些功能还能再动态地撤销 优点 继承的有利补充,比继承灵活,不改变原有对象的情况下,给一个对象扩展功能 通过使用不同装饰类以及这些类的排列组合,可以实现不同的效果 符合开闭原则 缺点 ...原创 2019-08-01 22:25:55 · 83 阅读 · 0 评论 -
适配器模式
定义 将一个类的接口转换成客户期望的另一个接口 使原本不兼容的类可以一起工作 根据适配器类与适配者类的关系不同,适配器模式可分为对象适配器和类适配器两种,在对象适配器模式中,适配器与适配者之间是关联关系;在类适配器模式中,适配器与适配者之间是继承(或实现)关系。 适配是为了实现某种目的而为一个适配类暂时性的加上某种方法,所以不能破坏适配类的结构。同时不这么做也符合Java的高内聚,低耦...原创 2019-08-02 00:37:35 · 93 阅读 · 0 评论 -
解释器模式
定义 给定一个语言(如由abcdef六个字符组成的字符串集合),定义它的文法的一种表示(S::=abA*ef,A::=cd)并定义一个解释器,解释器使用该表示来解释语言中的句子。其中的解释器类似一个翻译机。 为了解释一种语言,而为语言创建的解释器。 字面上看,应该不难理解,就是解释语句的,比如对字符串 "1 + 2" 进行翻译为数学上的1+2,但是在实现上,会比较复杂。 类型 行为型 ...原创 2019-08-13 16:42:44 · 201 阅读 · 0 评论 -
享元模式
定义 提供了减少对象数量从而改善应用所需的对象结构的方式,运用共享技术有效的支持大量细粒度的对象。简而言之,就是将类的通用属性抽出来,建立对象池,以达到限制对象数量的效果;一般用在需要多次创建对象的情况,如线程池、String常量池、数据库连接池、缓冲池等等。 适用场景 常常应用于系统底层的开发,以便解决系统新能问题 系统有大量相似对象,需要缓冲池的场景 例如如果一个系统存...原创 2019-08-08 22:55:57 · 163 阅读 · 0 评论 -
策略模式
定义 定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化不会影响到使用算法的用户。 可以大范围的处理掉 if—else。通俗的讲,就是将对应不同情况的策略封装起来,应用多态的机制针对不同的情况调用这些策略类。比如生活中淘宝的促销活动,满减,立减,返现都是不同的促销策略,这样就可以把这些不同的促销策略封装起来。 策略模式使用的是面向对象的继承和多态机制,从而实现同一行为在...原创 2019-08-13 15:35:02 · 154 阅读 · 0 评论