`

设计模式简单总结

    博客分类:
  • Java
 
阅读更多

20140118133026285

 

 

一 、创建型模式

 

  1.1单例模式

 

   设计原则:无

 

   介绍:在整个应用中只有一个对象

 

  1.2简单工厂
simplefactory

 

  常用场景:需要在一堆产品中选择其中一个产品
  介绍:通过工厂类去创建产品,调用者不用直接去创建对象,并封装了对象的创建细节。

 

  设计原则:遵循单一职责 、违背开闭原则(生成不同对象,需要实现不同的工厂类,扩展性不好)

 

 1.3工厂方法模式

 

   factoryMethod

 

   常用场景:一种场景是希望工厂与产品的种类对客户端保持透明,给客户端提供一致的操作,另外一种是不同的工厂和产品可以提供客户端不同的服务或功能
   介绍:工厂方法模式又叫虚拟构造子模式或者多态性共存模式,工厂模式的用意是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中

 

   设计原则:单一指责,依赖倒置,开闭原则

 

 
 1.4抽象工厂

 

  abstractFactory

 

    常用场景:需要一个接口可以提供一个产品族,且不必知道产品的具体种类
    介绍: 工厂方法模式与抽象工厂模式最大的区别在于,在工厂方法模式中,工厂创造的是一个产品,而在抽象工厂模式中,工厂创造的是一个产品族。

 

    设计原则:单一指责,依赖倒置,开闭原则

 

1.5建造者模式

 

builder

 

    常用场景:需要构建一批构建过程相同但表示不同的产品,而构建过程非常复杂

 

    介绍:建造模式是对象的创建模式。建造模式可以将一个产品的内部表象与产品的生成过程分割开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。

 

   设计原则: 遵循单一职责、开闭原则

 

1.6 原型模式

 

prototype
   常用场景:需要在运行时动态的创建指定实例种类的对象,或是需要复用其状态

 

   介绍:通过给出一个原型对象来指明所要创建的对象的类型,然后用复制这个原型对象的办法创建出更多同类型的对象

 

   设计原则:无

 

二、结构模式

 

  2.1 代理模式

 

proxy
  常用场景:需要修改或屏蔽某一个或若干个类的部分功能,复用另外一部分功能,可使用静态代理,若是需要拦截一批类中的某些方法,在方法的前后插入一些一致的操作,假设这些类有一致的接口,可使用JDK的动态代理,否则可使用cglib

 

  介绍:代理模式给某一个对象提供一个代理对象,并由代理对象控制原有对象的引用
  设计原则:体现功能复用

 

 2.2适配器模式

 

  adapter、、

 

   常用场景:需要使用一个类的功能,但是该类的接口不符合使用场合要求的接口,可使用定制适配器,又或者是有一个接口定义的行为过多,则可以定义一个缺省适配器,让子类选择性的覆盖适配器的方法

 

   介绍:把一个类的接口变换成客户端所期待的另一种结构,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作
   原则: 遵循开闭原则、体现功能复用

 

2.3装饰器模式

 

decorator

 

  常用场景:一个类需要动态的添加功能,且这些功能可以相互叠加
  介绍:装饰器模式又名包装模式,装饰器模式用以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案

 

  设计原则: 遵循迪米特、单一职责、开闭原则,破坏里氏替换,体现功能复用

 

2.4 桥接模式

 

bridge

 

 常用场景:一个对象有多个维度的变化,需要将这些维度抽离出来,让其独立变化

 

 介绍:业务抽象角色引用业务实现角色,或者说业务抽象角色的部分实现是由业务实现角色实现完成的。
 设计原则: 遵循单一职责、迪米特、开闭原则,体现功能复用

 

2.5 组合模式

 

composite

 

   常用场景:当有一个结构可以组合成树形结构,且需要向客户端提供一致的操作接口,使得客户端操作忽略简单元素与复杂元素

 

   介绍:有时又叫做部分-整体模式。组合模式将对象组织到树结构中,可以用来描述整体与部分的关系。组合模式可以使客户端将单纯元素与复合元素同等看待

 

   设计原则: 遵循依赖倒置、开闭原则,破坏接口隔离

 

2.6 享元模式

 

flyweight

 

   常用场景:一些状态相同的对象被大量的重复使用
   介绍:享元模式以共享方式高效的支持大量的细粒度对象
2.7 门面模式

 

facade

 

  常用场景:一个子系统需要对外提供服务
  介绍:外部与子系统的通信(交互)必须通过统一的门面对象进行

 

  设计原则:遵循迪米特

 

三、行为型模式

 

 3.1 观察者模式

 

 observer

 

 常用场景:需要将观察者与被观察者解耦或者是观察者的种类不确定

 

 介绍:又叫发布订 模式,观察者模式定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通知所有观察这对象,使它们能够自动更新自己
 设计原则:遵循迪米特、开闭原则

 

3.2 模板方法模式

 

 templateMethod

 

 常用场景:一批子类的功能有可提取的公共算法骨架

 

 介绍:准备一个抽象类,将部分逻辑以抽象方法形式让子类去实现,不同哦能的子类可以以不同的方式实现这些抽象方法,从而对剩余的逻辑有不同的实现,这就是模板方法模式的用意
 设计原则:破坏里氏替换,体现功能复用

 

3.3 命令模式

 

command
  常用场景:行为的请求者与行为的处理者耦合度过高
介绍:命令模式把一个请求或在操作封装到一个对象中,命令模式允许系统使用不同的 请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能
  设计原则:遵循迪米特、开闭原则

 

3.4 状态模式

 

state
 常用场景:一个对象在多个状态下行为不同,且这些状态可互相转换

 

 介绍:状态模式允许一个对象在其内部状态改变的时候改变其行为,这个对象唉看上去就像是改变了它的类一样
 设计原则:遵循单一职责、依赖倒置、开闭原则

 

3.5责任链模式

 

chainOfResponsibility

 

 常用场景:一个请求的处理需要多个对象当中的一个或几个协作处理

 

 介绍:很多对象是由每一个对象对其下家的引用而连接起来形成一条链,请求在这个链上传递,直到链上的某一个对象囧丁处理此请求,发出这个请求的客户端并不知道链上的哪个对象最终处理了这个对象,这使得系统可以在不影响客户端的情况下动态地重新组织链和分配责任
 设计原则:遵循迪米特

 

3.6 解释器模式

 

interpreter
 常用场景:有一种语言被频繁的使用
  介绍:解释器模式可以定义出其文法的一种表示,并同时提供一个解释器。客户端可以使用这个解释器来解释这个语言中的句子
 设计原则:遵循单一职责

 

3.7中介者模式

 

mediator
 常用场景:一个系列的对象交互关系十分复杂

 

 介绍:中介者模式包装了一系列对象相互作用的方式,使得这些对象不必相互明显引用。从而使它们可以较松散地耦合
 设计原则:遵循迪米特,破坏单一职责
3.8 访问者模式

 

  vistor
 常用场景:作用于一个数据结构之上的操作经常变

 

 介绍:访问者模式的目地是封装一些施加于某种数据结构元素之上的操作。一旦这些操作需要修改的话,接受这个操作的数据结构则可以保持不变
 设计原则:遵循倾斜的开闭原则

 

3.9策略模式

 

strategy
 常用场景:算法或者策略需要经常替换
  介绍:其用意是针对一组算法,将每一个算法封装到具有共同接口的独立的类中,从而使得它们可以相互替换
 设计原则:遵循单一职责、依赖倒置、迪米特、开闭原则

 

3.10备忘录模式
memento

 

 常用场景:需要在对象的外部保存该对象的内部状态
 介绍:又叫快照模式,备忘录对象是一个用来存储另外一个对象内部状态的快照的对象。备忘录模式的用意是在不破坏封装性的条件下,将一个对象的状态捕捉,并外部化存储起来,从而可以在将来适合的时候把这个对象还原到存储起来的状态
 设计原则:遵循迪米特、开闭原则

 

3.11迭代器模式

 

iterator
 常用场景:需要迭代访问一个聚合对象中的各个元素,且不暴露该聚合对象内部的表示

 

 介绍:迭代器模式可以顺序的访问一个聚集中的元素而不必暴露聚集的内部表象
 设计原则:遵循迪米特

  转载自并发编程网 – ifeve.com

感谢 ifeve

 
分享到:
评论

相关推荐

    C#面向对象设计模式纵横谈(25):设计模式总结

    本篇文章将对一系列重要的C#面向对象设计模式进行总结,帮助开发者更好地理解和应用这些模式。 1. 工厂模式:工厂模式是一种创建型设计模式,提供了一种创建对象的最佳方式,通过抽象工厂接口,避免了代码与具体类...

    设计模式总结.pdf

    本总结文档涵盖了所有的设计模式,并对常用的模式进行了详细解释,非常适合程序员在面试前快速复习以及日常学习使用。 文档中提到的六大设计原则,包括单一职责原则、里氏替换原则、接口隔离原则、迪米特法则、开闭...

    java软件设计模式期末总结

    Java软件设计模式是软件开发中的重要概念,它们是经过时间考验的最佳实践,旨在解决常见的设计问题,提高代码的可读性、可维护性和可扩展性。以下是对标题和描述中涉及的一些关键知识点的详细说明: 1. **单一职责...

    java 设计模式-个人总结

    ### Java设计模式——个人总结 #### 一、概述 本文档总结了常见的Java设计模式及其应用,涵盖了十种经典的设计模式,并提供了相应的代码示例。这些设计模式旨在解决软件开发过程中遇到的一系列常见问题,帮助...

    Java23种设计模式(总结)

    有感于设计模式在日常开发中的重要性,同时笔者也自觉对设计模式小有心得,故笔者*写二十三种设计模式的简单例子、 并整理二十三种设计模式的理论部分,综合汇总成这份Java设计模式(疯狂J*va联盟版),希望对大家...

    基于Java的设计模式大作业绘图系统【六种设计模式+文档】.zip

    本系统基于六种设计模式,运用到的设计模式有备忘录模式,...设计模式是一套被反复使用的、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了重用代码、让代码更容易被他人理解、保证代码可靠性。

    几种常用的设计模式介绍总结

    - **简单工厂模式**:虽然不是23种官方设计模式之一,但它是一种实用的方法,用于封装对象的创建逻辑。 - **工厂方法模式**:定义一个创建产品对象的接口,让子类决定实例化哪一个类。工厂方法让类的实例化推迟到...

    软件设计模式大作业

    本资源为一份完整的软件设计模式大作业,涵盖了六种设计模式的应用,分别是简单工厂模式、工厂方法模式、单例模式、门面模式、策略模式和观察者模式。该大作业的主要内容包括系统流程、系统类图、各个模式的子类图、...

    软件设计模式(java版)习题答案.pdf

    2. 设计模式使人们可以更加简单方便地复用成功的设计和体系结构,将已证实的技术表述成设计模式也会使新系统开发者更加容易理解其设计思路。 3. 设计模式使得设计方案更加灵活,且易于修改。 设计模式的基本要素 ...

    lua设计模式总结

    1、简单工厂模式lua实现 2、工厂方法模式lua实现 3、原型模式lua实现 4、建造者模式lua实现 5、单例模式lua实现 6、抽象工厂模式lua实现 结构型模式 1、装饰模式lua实现 2、代理模式lua实现 3、外观模式lua实现 4、...

    设计模式——刘伟

    设计模式并不是具体的代码或库,而是一种经验总结,是软件开发人员在长期实践中形成的通用解决方案的模板。 1. **单例模式**:确保一个类只有一个实例,并提供一个全局访问点。单例模式常用于控制资源的共享,如...

    设计模式总结与分析

    Sunny在CSDN技术博客中陆续发表了100多篇与设计模式学习相关的文章,涵盖了七个面向对象设计原则和24个设计模式(23个GoF设计模式 + 简单工厂模式),为了方便大家学习,现将所有文章的进行了整理,方便大家下载阅读...

    设计模式学习笔记总结

    在IT行业中,设计模式是软件开发中的重要概念,它们代表了在特定场景下解决常见问题的最佳实践。这里我们聚焦于C#语言中的设计模式学习笔记,涵盖了多种经典的设计模式,如合成模式、桥梁模式、装饰模式、享元模式、...

    自己总结的设计模式笔记

    简单工厂模式是一种创建型设计模式,指的是由一个工厂对象来决定创造哪一种产品类的实例。工厂类中包含了必要的逻辑判断。 例如,水果工厂可以生产苹果和草莓两种水果。工厂类可以根据参数来决定创建哪一种水果对象...

    设计模式学习总结.doc

    设计模式并不是僵化的模板,而是通过总结和提炼优秀设计,为开发者提供了一套通用的设计原则和最佳实践。它们分为三大类:创建型模式(如工厂模式、单例模式)、结构型模式(如适配器模式、代理模式)和行为型模式...

    java设计模式案例

    当引入设计模式会导致系统过于复杂时,这意味着我们可能错误地处理了问题,原本简单的问题被复杂化了。 总结来说,设计模式是软件开发中的有力工具,但正确理解和应用它们需要实践、反思和持续学习。通过对设计模式...

    设计模式总结.docx

    设计模式是软件设计中的一种最佳实践,用于解决常见的编程问题,提高代码的可重用性、可维护性和可扩展性。在PHP中,设计模式的应用同样广泛,可以帮助开发者更好地组织和管理代码。以下是对给定内容中提到的一些...

    .net设计模式详细介绍以及案例代码

    设计模式的学习过程是不断实践和总结的过程。通过不断的应用和实践,开发者能够深入理解模式的本质,并在适当的时候灵活运用。设计模式不是一成不变的,它们也需要随着新技术和新需求的发展而演进。 .NET设计模式...

    碾磨设计模式.pdf

    设计模式是软件工程中的一种重要思想,它是在特定情境下解决问题的经验总结,可以被重复使用,以提高代码的可读性、可维护性和复用性。"研磨设计模式"是一本专注于介绍设计模式的博文集,作者chjavach在JavaEye社区...

Global site tag (gtag.js) - Google Analytics