`
kidiaoer
  • 浏览: 822502 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

设计模式总结

阅读更多
       设计模式



设计模式(Design pattern)是一套被反复使用、多数人知晓的 、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。


一.Factory(简单工厂)


定义:用一个方法去代替构造器或者是new关键字,把对象的创建隐藏起来。

优点:
                1.隐蔽了new关键字和构造器
                2.降低了这个对象与别的类之间的耦合度,提高了程序的可扩展性
                        原因:当子类被别的类替换,或者构造器的参数发生变化的时候,只需改动工厂方法内的new即可,改动量降到了最低,
                             而如果不用工厂模式,而是直接用new关键字的话,需要改动的地方就很多了
                3.把对象的设计和实现分割开来,从而代码扩展性强、灵活性更高。 

解决问题:用来解决一个一个类的生成方式过多,容易发生变动,或者是父类和子类之间容易替换的地方。



二.Singleton(单例模式)

定义:确保一个类只有唯一的一个实例。

分类: 懒汉式:
                1.声明一个私有的,静态的本类对象,但并不在声明的时候就初始化,因此,它的值为null
                2.私有化构造器
                3.对外提供一个全局的,公有的,静态的,唯一的方法,用来获得该实例,但注意的是:必须要手动保持线程同步(synchronized)
                4.在该方法里,判断对象是否为null,如果是null的话,表示这个类还没有被实例化,就会初始化这个对象,再返回
                              如果不是null的话,就直接返回
        饿汉式:
                1.声明一个私有的,静态的本类对象,并在声明的时候就初始化
                2.私有化构造器
                3.对外提供一个全局的,公有的,静态的,唯一的方法,用来获得该实例(饿汉模式线程本身就是同步的)
                4.在该方法里,直接返回该对象即可
        从资源利用效率角度来讲,这个比懒汉式单例类稍差些。从速度和反应时间角度来讲,
        则比懒汉式单例类稍好些。

解决问题:一个类在Java 虚拟机只有一个实例.使一个类只有一个对象,整个系统共享这个对象。



三.AbstaractFactory(抽象工厂模式)

定义:提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

用途

       一个系统要独立于它的产品的创建、组合和表示时。

       一个系统要由多个产品系列中的一个来配置时。

       当你要强调一系列相关的产品对象的设计以便进行联合使用时。

       当你提供一个产品类库,而只想显示它们的接口而不是实现时。



四.Template(模板模式)

定义:定义一个操作中算法的骨架,将一些步骤的执行延迟到其子类中.

解决问题:重要是解决子类之间代码或者是流程的重复问题。

常用地方:DAO模式里面的模板类,Spring里面的常用模板,包括JdbcTemplate等等



五.strategy(策略模式)

定义:定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。

解决问题:某个具体的解决方法有很多种可选择的实现。

常用地方:以不同的格式保存文件,以不同的算法压缩文件;以不同的格式输出同样数据的图形,比如曲线 或框图bar等




六.Observer(观察者模式)

定义:定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时, 所有依赖于它的对象都得到通知并被自动更新。

解决问题:解决多个对象间相互依赖关系的相互通知。

常用地方:一些数据有多个视图的表示,譬如Java中自带的图形事件应用。

意图:

       当一个抽象模型有两个方面, 其中一个方面依赖于另一方面。将这二者封装在独立的对象中以使它们可以各自独立地改变和复用。

       当对一个对象的改变需要同时改变其它对象, 而不知道具体有多少对象有待改变。

       当一个对象必须通知其它对象,而它又不能假定其它对象是谁。换言之, 你不希望这些对象是紧密耦合的




七.State(状态模式)

定义: 不同的状态,不同的行为;或者说,每个状态有着相应的行为.

何时使用?
State模式在实际使用中比较多,适合"状态的切换".因为我们经常会使用If elseif else 进行状态切换, 如果针对状态的这样判断切换反复出现,我们就要联想到是否可以采取State模式了.




八.Composite(组合模式)

定义:将对象以树形结构组织起来,以达成“部分-整体” 的层次结构,使得客户端对单个对象和组合对象的使用具有一致性.

解决问题:树形数据结构的方案

适用性:

       你想表示对象的部分-整体层次结构。

       你希望用户忽略组合对象与单个对象的不同,用户将统一地使用组合结构中的所有对象



九.Facade(外观模式,门面模式)

定义:为子系统中的一组接口提供一个一致的界面,F a c a d e 模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

解决问题:子接口繁多,调用复杂,内部交互地方比较多

适用性:

       当你要为一个复杂子系统提供一个简单接口时。子系统往往因为不断演化而变得越来越复杂。大多数模式使用时都会产生更多更小的类。这使得子系统更具可重用性,也更容易对子系统进行定制,但这也给那些不需要定制子系统的用户带来一些使用上的困难。F a c a d e 可以提供一个简单的缺省视图,这一视图对大多数用户来说已经足够,而那些需要更多的可定制性的用户可以越过f a c a d e 层。

       客户程序与抽象类的实现部分之间存在着很大的依赖性。引入f a c a d e 将这个子系统与客户以及其他的子系统分离,可以提高子系统的独立性和可移植性。

       当你需要构建一个层次结构的子系统时,使用f a c a d e 模式定义子系统中每层的入口点。如果子系统之间是相互依赖的,你可以让它们仅通过f a c a d e 进行通讯,从而简化了它们之间的依赖关系。




十.Adapter(适配器模式)

定义:将一个类的接口转换成客户希望的另外一个接口。Adapter 模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作。

解决问题:已经存在类似功能的类或接口,但是方法签名不一样。

适用性:

       你想使用一个已经存在的类,而它的接口不符合你的需求。

       你想创建一个可以复用的类,该类可以与其他不相关的类或不可预见的类(即那些接口可能不一定兼容的类)协同工作。

       (仅适用于对象 Adapter )你想使用一些已经存在的子类,但是不可能对每一个都进行子类化以匹配它们的接口。对象适配器可以适配它的父类接口。



十一.Decorator(装饰器模式)

定义:动态地给一个对象添加一些额外的职责。就增加功能来说,Decorator模式相比生成子类更为灵活。

解决问题:一个对象需要经常动态增加属性或职责

适用性:

        在不影响其他对象的情况下,以动态、透明的方式给单个对象添加职责。

       处理那些可以撤消的职责。

       当不能采用生成子类的方法进行扩充时。一种情况是,可能有大量独立的扩展,为支持每一种组合将产生大量的子类,使得子类数目呈爆炸性增长。另一种情况可能是因为类定义被隐藏,或类定义不能用于生成子类。
分享到:
评论

相关推荐

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

    总结来说,李建忠先生的“设计模式总结”涵盖了C#中广泛使用的设计模式,强调了它们在实际项目中的应用价值。理解并熟练运用这些模式,对于提升C#开发者的专业素养和项目质量具有重大意义。无论是初学者还是经验丰富...

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

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

    23种设计模式总结

    设计模式总结,对23种经典模式的分类,各自的使用方法,优缺点进行详细的描述。

    大话设计模式总结.pdf

    大话设计模式总结.pdf大话设计模式总结.pdf大话设计模式总结.pdf大话设计模式总结.pdf大话设计模式总结.pdf

    设计模式总结.pdf

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

    Java设计模式总结

    这里主要针对标题“Java设计模式总结”以及描述中提及的资源进行深入阐述。 1. **设计模式的概念**: 设计模式并非具体的代码或库,而是一种在特定上下文中解决常见问题的模板。它们描述了如何在面向对象设计中以...

    23种设计模式总结及案例.pdf

    在《23种设计模式总结及案例》中,通常会涵盖以下主要的设计模式类型: 1. 创建型模式:这类模式主要关注对象的创建过程,使得系统在不指定具体类的情况下创建对象,提高代码的灵活性。包括单例模式(Singleton)、...

    Java 设计模式总结 Java 设计模式总结

    设计模式总结主要包括创建型、结构型和行为型这三大类,每类模式都有其特定的应用场景和目标。 1. 创建型模式(创建对象的模式) - 工厂方法模式:允许将对象的创建过程推迟到子类中,使得代码更具可扩展性和灵活...

    23种软件设计模式总结

    设计模式是软件开发中的一种最佳实践,它是在特定上下文中解决常见问题的模板或蓝图,可以被反复使用,以提高代码的可读性、可维护性和灵活性。在Java编程中,23种经典的设计模式被广泛认可并应用,这些模式分为三大...

    大话设计模式总结.docx

    设计模式总结 设计模式是软件设计中的一种重要概念,它们是经过实践和经验总结出的优秀设计解决方案。设计模式的应用可以使软件设计更加灵活、可维护、可扩展和可重用。本文档对设计模式进行了总结和归纳,主要包括...

    设计模式总结篇

    ### 设计模式总结篇 #### 引言 在软件开发领域,设计模式作为一种重要的方法论,对于提升软件质量、增强代码可维护性和可扩展性具有不可替代的作用。本文旨在总结和探讨设计模式的相关知识,包括架构设计原则、...

    Spring 设计模式总结1

    Spring设计模式总结 在软件开发中,设计模式是解决常见问题的经验总结,它们为程序员提供了在特定场景下设计高效、可维护代码的蓝图。在Spring框架中,许多设计模式被广泛应用,以提升系统的灵活性和可扩展性。以下...

    .Net 面向对象及设计模式总结

    《.Net 面向对象及设计模式总结》是一份深度涵盖.Net开发中面向对象编程原理和设计模式的宝贵资料,特别适合初学者巩固基础知识,以及有经验的开发者进行复习和提升。通过阅读这些笔记,我们可以深入理解面向对象的...

    常见的设计模式总结

    自己根据老师的课件的和讲解,总结的关于程序设计模式的知识,拿出来和大家分享一下,希望能帮到和我一样,在学设计模式时遇到困难的同学。

    设计模式总结-模板设计模式,单例模式(singleTon)

    ### 设计模式总结:模板设计模式与单例模式 #### 模板设计模式 模板设计模式是一种行为型设计模式,它定义了一个算法的骨架,并允许子类为算法的某些步骤提供具体的实现。通过这种方式,算法的基本流程保持不变,...

    设计模式总结-java与模式清晰版

    "设计模式总结-java与模式清晰版"这个标题表明我们即将探讨的是关于Java编程语言中的设计模式,旨在帮助开发者更好地理解和应用这些模式。这篇博文链接(https://410063005.iteye.com/blog/1680031)可能提供了详细...

    大话设计模式总结.doc

    设计模式总结 设计模式是软件设计中的一种解决方案,旨在解决软件设计中的一些常见问题。以下是设计模式的总结,涵盖了多种设计模式的概念、特点和应用场景。 一、类图备注 * +public:公共成员变量或方法 * -...

    趣聊设计模式总结1

    设计模式总结 设计模式是软件开发中的一种解决方案,它提供了一种通用的解决方案来解决常见的软件设计问题。设计模式可以分为三大类:创建型模式、结构型模式和行为型模式。 创建型模式(Creational Patterns) *...

    java23种设计模式总结

    java23种设计模式总结 . 设计模式 1.1 创建型模式 1.1.1 工厂方法 1.1.2 抽象工厂 1.1.3 建造者模式 .. 1.1.4 单态模式 .. 1.1.5 原型模式 . 1.2 结构型模式 ... 1.2.1 适配器模式 1.2.2 桥接模式 ........

Global site tag (gtag.js) - Google Analytics