![](https://img-blog.csdnimg.cn/20201014180756922.png?x-oss-process=image/resize,m_fixed,h_64,w_64)
设计模式
∝ 1 颗心╮
Java
展开
-
设计模式简介
设计模式的类型:总共有23中设计模式。这些模式可以分为三大类:创建型模式(Creational Patterns)、结构型模式(Structural Patterns)、行为模式(Behavioral Patterns)。还有另一类设计模式:J2EE设计模式。根据其目的(模式是用来做什么的)可分为创建型(Creational),结构型(Structural)和行为型(Behavioral)...原创 2018-11-03 13:43:26 · 137 阅读 · 0 评论 -
建造者模式
一、定义建造者(Builder)模式: 又名生成器模式,是一种对象构建模式。指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示。它是将一个复杂的对象分解为多个简单的对象,然后一步一步构建而成。它将变与不变相分离,即产品的组成部分是不变的,但每一部分都是可以灵活选择的。 二、建造者模式结构和实例建造者模式由产品、抽象建造者、具体建造者、指挥者等4个要素构成。...原创 2018-12-25 10:26:11 · 69 阅读 · 0 评论 -
适配器模式
一、定义适配器模式(Adapter):将一个类的接口转换成客户希望的另外一个接口。Adapter模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。 二、适配器模式结构图 适配器模式中的角色:目标(Target)角色:目标接口,系统所期待实现的目标。源(Adapee)角色:当前已经存在的原有的实现类,即将被适配的类。适配器(Adaper)角色:将原有实现转...原创 2018-12-31 09:08:18 · 197 阅读 · 0 评论 -
备忘录模式
一、定义备忘录模式(Memento):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。 二、备忘录模式结构图备忘录模式中涉及的角色:发起人(Originator)角色:负责创建一个备忘录Memento,用以记录当前时刻它的内部状态,并可使用备忘录恢复内部状态。Originator可根据需要决定Mement...原创 2019-01-04 20:03:04 · 99 阅读 · 0 评论 -
组合模式
一、定义组合模式(Composite):将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。 二、组合模式结构图组合模式中的角色:Component (抽象构件):组合中的对象声明接口,在适当情况下,实现所有类共有接口的默认行为。声明一个接口用于访问和管理Component的子部件。Leaf(叶子构件):在组合中表示...原创 2019-01-05 21:06:17 · 103 阅读 · 0 评论 -
迭代器模式
一、定义迭代器(Iterator):提供一种方法顺序访问一个聚合对象中的各种元素,而又不暴露该对象的内部表示。 二、迭代器模式结构图迭代器模式中的角色:(1)迭代器角色(Iterator):定义遍历元素所需要的方法。(2)具体迭代器角色(Concrete Iterator):实现迭代器接口中定义的方法,完成集合的迭代。(3)容器角色(Aggregate):一般是一个...原创 2019-01-06 17:24:26 · 64 阅读 · 0 评论 -
单例模式
一、定义单例模式(Singleton):保证一个类仅有一个实例,并提供一个访问它的全局访问点。二、单例模式结构图单例模式中设计的角色:Singleton(单例):在单例类的内部实现只生成一个实例,同时它提供一个静态的getInstance()工厂方法,让客户可以访问它的唯一实例;为了防止在外部对其实例化,将其构造函数设计为私有;在单例类内部定义了一个Singleton类型...原创 2019-01-17 09:06:16 · 210 阅读 · 0 评论 -
合成/聚合复用原则
合成/聚合复用原则:尽量使用合成/聚合,尽量不要使用类继承。合成(Gomposition,也有翻译成组合)和聚合(Aggregation)都是关联的特殊种类。聚合表示一种弱的‘拥有’关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分;合成则是一种强的‘拥有’关系,体现了严格的部分和整体的关系,部分和整体的生命周期一样。合成/聚合复用原则的好处是:优先使用对象的合成/聚合将有助于...原创 2019-02-06 09:23:40 · 1769 阅读 · 0 评论 -
桥接模式
一、定义桥接模式(Bridge)是一种结构型设计模式。Bridge模式基于类的最小设计原则,通过使用封装、聚合及继承等行为让不同的类承担不同的职责。它的主要特点是把抽象(Abstraction)与行为实现(Implementation)分离开来,从而可以保持各部分的独立性以及应对他们的功能扩展。二、桥接模式结构图桥接模式的角色和职责:1.Client 调用端这是Bridge...原创 2019-02-06 09:52:30 · 238 阅读 · 0 评论 -
命令模式
一、定义命令模式(Command Pattern):将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。命令模式是一种对象行为型模式,其别名为动作(Action)模式或事务(Transaction)模式。二、模式结构图命令模式中的角色:Receiver接受者角色:该角色就是干活的角色,命令传递到这里是应该被执行的...原创 2019-02-06 18:31:43 · 123 阅读 · 0 评论 -
职责链模式
一、定义责任链模式:将能够处理同一类请求的对象连成一条链,使这些对象都有机会处理请求,所提交的请求沿着链传递。从而避免请求的发送者和接受者之间的耦合关系。链上的对象逐个判断是否有能力处理该请求,如果能则就处理,如果不能,则传给链上的下一个对象。直到有一个对象处理它为止。二、职责链模式结构图 三、示例每一个公司对请假都是控制的很严格,必须要相关的人员签字。三天,主任签字;三到七天...原创 2019-02-07 18:38:28 · 161 阅读 · 0 评论 -
中介者模式
一、定义用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。二、中介者模式结构图中介者模式中的角色:1.Mediator中介者定义一个接口用于与各同事(Colleague)对象通信。2.ConcreteMediator具体中介者通过协调各同事对象实现协作行为,了解并维护它的各个同事。3.C...原创 2019-02-07 19:56:54 · 103 阅读 · 0 评论 -
享元模式
一、定义享元模式(Flyweight Pattern):运用共享技术有效地支持大量细粒度对象的复用。系统只使用少量的对象,而这些对象都很相似,状态变化很小,可以实现对象的多次复用。由于享元模式要求能够共享的对象必须是细粒度对象,因此它又称为轻量级模式,它是一种对象结构型模式。二、享元模式结构图享元模式中的角色:1、Flyweight (享元抽象类):一般是接口或者抽象类,定义了...原创 2019-02-07 20:17:35 · 151 阅读 · 0 评论 -
解释器模式
一、定义解释器模式(interpreter),给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语句中的句子。二、解释器模式结构图解释器模式中的角色:抽象表达式角色(AbstractExpression): 声明一个抽象的解释操作,这个接口为所有具体表达式角色都要实现的. 终结符表达式角色(TerminalExpression): 实现与文法中...原创 2019-02-09 09:24:14 · 135 阅读 · 0 评论 -
状态模式
一、定义状态模式(State):当一个对象的内在状态改变时允许改变其行为,这个对象看起来像是改变了其类。 二、模式结构图状态模式中的角色:环境(Context)角色:也称为上下文,他定义了客户感兴趣的接口,维护一个当前状态,并将与状态相关的操作委托给当前状态对象来处理。抽象状态(State)角色:定义了一个接口,用以封装环境对象中的特定状态所对应的行为。具体状态(C...原创 2018-12-29 08:47:30 · 127 阅读 · 0 评论 -
外观模式
一、定义外观模式(Facade Pattern):为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式又称为门面模式,它是一种对象结构型模式。外观模式是迪米特法则的具体实现,通过引入一个新的外观角色可以降低原有系统的复杂度,同时降低客户类与子系统的耦合度。 二、外观模式结构图外观模式包含两个角色:(1)外观角色(...原创 2018-12-23 10:39:03 · 91 阅读 · 0 评论 -
抽象工厂模式
一、定义抽象工厂模式(Abstract Factory Pattern):提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。抽象工厂模式属于对象创建型模式。二、模式简介模式动机:在工厂方法模式中具体工厂负责生产具体的产品,每一个具体工厂对应一种具体产品,工厂方法也具有唯一性,一般情况下,一个具体工厂中只有一个工厂方法或者一组重载的工厂方法。但是有时候我们需要一个...原创 2018-12-27 19:35:39 · 139 阅读 · 0 评论 -
开放-封闭原则(The Open-Closed Principle 、OCP)
一、概念软件实体(模块、类、函数等)应该可以扩展,但是不可以修改。也就是说软件对扩展开放,对修改封闭。需要说明的是,对修改关闭不是说软件设计不能做修改,只是尽量不要做不必要的修改。怎么才能做到呢?那就是有相应的扩展性。其实,软件有相应的扩展性是好处,但是不能说每个地方都有扩展。反而造成了代码的臃肿。所以这里的扩展与修改关闭是有限制的。开闭原则,可以说是其他五大原则的实现,也是面向对象设计的...原创 2018-12-12 15:33:53 · 110 阅读 · 0 评论 -
里氏代换原则(Liskov Substitution Principle、LSP)
一、概念氏代换原则中说,任何基类可以出现的地方,子类一定可以出现。 LSP是继承复用的基石,只有当衍生类可以替换掉基类,软件单位的功能不受到影响时,基类才能真正被复用,而衍生类也能够在基类的基础上增加新的行为。里氏代换原则是对“开-闭”原则的补充。实现“开-闭”原则的关键步骤就是抽象化。而基类与子类的继承关系就是抽象化的具体实现,所以里氏代换原则是对实现抽象化的具体步骤的规范。 简单的理...原创 2018-12-12 19:16:58 · 572 阅读 · 0 评论 -
依赖倒转原则(Dependence Inversion Principle、DIP)
一、概念依赖倒转原则(依赖倒置原则)的原始定义是:High level modules should not depend upon low level modules. Both should depend upon abstractions. Abstractions should not depend upon details. Details should depend upon ab...原创 2018-12-12 20:20:21 · 637 阅读 · 0 评论 -
装饰模式
一、定义装饰模式(Decorator):动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。 二、为什么使用这个模式以对客户透明的方式动态地给一个对象附加上更多的责任,装饰模式可以在不需要创造更多的子类的情况下,将对象的功能加以扩展。1. 需要扩展一个类的功能,或给一个类添加附加职责。2. 需要动态的给一个对象添加功能,这些功能可以再动态的撤销。...原创 2018-12-13 11:36:47 · 82 阅读 · 0 评论 -
代理模式(Proxy)
一、定义代理模式给某一个对象提供一个代理对象,并由代理对象控制对原有对象的引用。通俗的来讲代理模式就是我们生活中常见的中介。 二、结构(1)Subject 抽象主题角色(共同接口)可以是抽象类或者接口,是一个最普通的业务类型定义,无特殊要求。public interface Subject { //定义一个方法 public void request(...原创 2018-12-14 11:24:42 · 144 阅读 · 0 评论 -
原型模式
一、定义用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象。无须知道任何创建的细节。 原型模式的基本工作原理是通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝原型自己来实现创建过程。 二、原型模式结构(1)Prototype(抽象原型类):声明克隆方法的接口,是所有具体原型类的公共父类,它可是抽象类也可以是接口,甚至可以是具体实...原创 2018-12-20 16:55:29 · 139 阅读 · 0 评论 -
工厂方法模式
一、概念工厂方法模式又称为工厂模式,也叫虚拟构造器(Virtual Constructor)模式或者多态工厂模式(Polymorphic Factory),在工厂方法模式中,父类负责定义创建对象的公共接口,而子类则负责生成具体的对象,这样做的目的是将类的实例化操作延迟到子类中完成,即由子类来决定究竟应该实例化(创建)哪一个类。工厂方式法模式(Factory Method),定义了一个用于创建...原创 2018-12-15 17:53:29 · 102 阅读 · 0 评论 -
模板方法模式
一、定义模板方法模式(Template Method Pattern):定义了一个操作中算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。模板方法是一种类行为型模式。 二、模式动机模板方法模式是基于继承的代码复用基本技术,模板方法模式的结构和用法也是面向对象设计的核心之一。在模板方法模式中,可以将相同的代码放在父类中,而将...原创 2018-12-21 10:16:44 · 165 阅读 · 0 评论 -
观察者模式
一、定义观察者模式(Observer Pattern):定义对象之间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。观察者模式的别名包括发布-订阅(Publish/Subscribe)模式、模型-视图(Model/View)模式、源-监听器(Source/Listener)模式或从属者(Dependents)模式。观察者模式是一种对象行为型模式。...原创 2018-12-27 11:23:07 · 136 阅读 · 0 评论 -
简单工厂模式(静态工厂模式)
一、模式分析将对象的创建和对象本身业务处理分离可以降低系统的耦合度,使得两者修改起来都相对容易。在调用工厂类的工厂方法时,由于工厂方法是静态方法,使用起来很方便,可通过类名直接调用,而且只需要传入一个简单的参数即可,在实际开发中,还可以在调用时将所传入的参数保存在XML等格式的配置文件中,修改参数时无须修改任何源代码。简单工厂模式最大的问题在于工厂类的职责相对过重,增加新的产品需要修改工...原创 2018-12-11 09:59:19 · 196 阅读 · 2 评论 -
策略模式
一、策略模式定义策略模式属于对象的行为模式。其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换。策略模式使得算法可以在不影响到客户端的情况下发生变化。 二、策略模式的结构策略模式是对算法的包装,是把使用算法的责任和算法本身分割开来,委派给不同的对象管理。策略模式通常把一个系列的算法包装到一系列的策略类里面,作为一个抽象策略类的子类。用一句话来...原创 2018-12-11 10:26:47 · 116 阅读 · 0 评论 -
单一职责原则(Single Responsibility Principle,SRP)
一、单一职责原则核心思想一个类应该有且只有一个变化的原因。 二、为什么引入单一职责原则单一职责原则将不同的职责分离到单独的类,每一个职责都是一个变化的中心。 在SRP中,把职责定义为变化的原因。当需求变化时,将通过更改职责相关的类来体现。如果一个类拥有多于一个的职责,则多个职责耦合在一起,会有多于一个原因来导致这个类发生变化。一个职责的变化可能会影响到其他的职责,另外,把多个...原创 2018-12-11 10:43:33 · 285 阅读 · 1 评论 -
迪米特法则
一、定义迪米特法则,也叫最少知识原则(LoD),如果两个类不必彼此直接通信,那么这两个类就不应当发生直接的相互作用,如果其中一个类需要调用另一个类的某一个方法的话,可以通过第三者转发这个调用。通俗的来讲,就是一个类对自己依赖的类知道的越少越好。也就是说,对于被依赖的类来说,无论逻辑多么复杂,都尽量地的将逻辑封装在类的内部,对外除了提供的public方法,不对外泄漏任何信息。迪米特法则还有一...原创 2018-12-22 10:07:24 · 1793 阅读 · 0 评论 -
访问者模式
一、定义访问者(Visitor)模式:提供一个作用于某对象结构中的各元素的操作表示,它使得可以在不改变各元素的类的前提下定义作用于这些元素的新操作。访问者模式是一种对象行为型模式。二、访问者模式结构图访问者模式结构图中包含以下5个角色: (1)Visitor(抽象访问者):抽象访问者为对象结构中每一个具体元素类ConcreteElement声明一个访问操作,从这个操作的名称或...原创 2019-02-09 10:11:54 · 284 阅读 · 0 评论