设计模式概念

设计模式概念

       设计模式(Design Pattern)是一套被反复使用、多数人知晓、经过分类编目的优秀代码设计经验的总结。使用设计模式是为了重用代码、使代码更容易理解并保证代码的可靠性。设计模式的使用于人于己于系统都是有利的,设计模式使代码编制真正工程化,是软件工程的基石,使人们可以更加简单方便地复用成功的设计和体系结构,将已证实的技术表述成设计模式也会使新系统开发者更容易理解其设计思路。设计模式为我们提供了一套可复用的面向对象技术。

       可复用面向对象软件系统一般划分为两大类:应用程序工具箱和框架(Framework)。我们平时开发的具体软件都是应用程序,Java 的基础类属于工具箱,而框架是构成特定软件可复用设计的一组相互协作的类。框架通常定义了应用程序的整体结构类和对象的关系等设计参数,以便具体应用实现着能集中于应用本身的特定细节。框架主要记录软件应用中共同的设计决策,强调设计复用,因此成熟的框架设计中必然要使用设计模式,如果熟悉这些设计模式将有助于对框架结构的理解,从而能迅速掌握框架的结构。

       Java设计模式贯彻的原理是:面向接口编程,而不是面向实现。其目标原则的降低耦合,增强灵活性。

 

设计模式要素

描述设计模式需要一定的格式,通常采用GoF格式:

  • 模式名称(pattern name)

设计模式的名称简洁的描述了设计模式的问题、解决方案和效果。一个模式必须有一个有意义的、简短而准确的名字。好的设计模式便于设计人员之间交流思想,进行抽象讨论及研究设计结果。找到一个恰当的模式名称,就可以讨论模式并在编写文档时使用它们。

  • 问题(problem)

模式了应该在何时使用模式。它解释了问题存在的前因后果,它可能描述了特定的设计问题,如怎样用对象表述算法等,也可能描述了不灵活设计的类或对象结构。有时候,问题部分会包括使用模式必须满足的一系列先决条件。

 

  • 解决方案(solution)

描述了设计的组成成分,它们之间的相互关系及各自的职责和协作方式。模式就像一个模板,可应用于多种不同场合,因此解决方案并不描述一个特定而具体的设计或实现,而是提供问题的抽象描述和怎样用一个具有一般意义的元素组合(类或对象组合)来解决这个问题。

扫描二维码关注公众号,回复: 307389 查看本文章

 

  • 效果(consequence)

描述了模式应用的效果及使用模式应权衡的问题。效果用来模式设计模式的利弊,它往往是衡量模式是否可用的重要因素,对于设计模式的选择有重要作用。软件效果大多关注对时间和空间的衡量,表述了语言和实现问题。因为复用是面向对象设计的要素之一,所以设计模式效果 包括其对系统的灵活性、扩展性和可移植性的影响,显式地列出这些效果对理解和评价这些模式具有很大的帮助。

 

  • 举例(examples)

使用一个或多个示意性的应用来说明特定的真实环境,以及模式是如何应用到环境中、改变环境,并给出模式使用后的末态环境。例子有助于理解设计模式的使用方法和适用性。

 

  • 末态环境(resulting context)

设计模式应用到系统之后的状态。末态环境包括模式带来的好结果和坏结果,以及新状态中含有的其他问题和可能涉及的其他有关系的模式。末态环境是 模式 的末态条件和可能有 的副作用。描述末态环境可以帮助比较末态环境与起始环境的区别和联系。

 

  • 推理(rationale)

推理解释本模式的步骤、规则,以及此模式作为一个整体是如何以特定的方式解决模式的。推理让使用者知道模式是如果工作的,为什么可以工作,以及使用此模式的优点是什么。描述模式外部的、可见的结构和行为,而推理则给出模式在系统表层以下的深层结构和关键机制。

 

  • 其它有关模式(related pattern)

描述在现有的系统中此模式和其它模式的静态和动态的关系。相关模式的初始环境和末态环境经常是相容的,这些模式有可能是本模式的前任模式,模式是有相关性的。

 

  • 已知的应用(known uses)

已知的应用是在已有的系统模式中出现和应用的例子,有助于证明此模式确实是对一个重复发生的问题可行的解答。已知的应用经常作为教材。

 

 

设计模式分类

常用的设计模式可以概括为23种,按照特点可以将其分为三大类型:

  1. 创建型

    创建型模式 是用来创建对象的模式,抽象了实例化的过程,帮助一个系统独立于其关联对象的创建。两个主要功能:

    • 将系统所使用的具体类的信息封装起来;
    • 隐藏类的实例是如何被创建和组织的。外界对于这些对象仅知道它们共同的接口,而不清楚其具体的实现细节。

    创建型模式的作用概括为如下两点:

    • 封装创建逻辑,不仅仅是new一个对象那么简单;
    • 封装创建逻辑变化,客户代码尽量不修改,或尽量少修改。

    常见的创建型设计模式有下列几种:

    • 单例模式(singleton pattern):一个类只有一个实例,而且自行实例化并向整个系统提供这个实例。
    • 工厂方法模式(factory pattern):在工厂方法模式中,工厂类是一个抽象类,实际的创建工作由其子类来完成。工厂方法的用意是定义一个创建产品对象的工厂接口,将实际创建工作推迟到子类中去,强调的是‘单个对象’ 变化。
    • 抽象工厂模式(abstract factory):抽象工厂模式是所有工厂模式中最为抽象、最具一般性的一种形态。抽象工厂可以向客户提供一个接口,使得客户可以在不必指定产品具体类型的情况下,创建多个产品对象,强调的是‘系列对象’的变化。
    • 建造者模式(builder pattern):把构造对象实例的逻辑移到了类的外部,在类的外部定义了该类的构造逻辑。它把一个复杂对象的构造过程从对象的表示中分离出来,其直接效果是将一个复杂对象简化为一个比较简单的目标对象,强调的是产品的构造过程。
    • 原型模式(prototype pattern):原型模式和工厂模式一样,同样对客户隐藏了对象创建工作,但与通过一个类实例化来构造新对象不同的是,原型模式是通过复制一个现有对象生成新对象。
  2. 结构型

    结构型模式讨论的是类和对象的结构,它采用继承机制来组合接口或实现(类结构型模式),或者通过组合一些对象实现新的功能(对象结构型模式)。这些结构型模式在某些方面具有很大的相似性,但侧重点却各有不同。常见的结构型设计模式有以下几种:

    • 代理模式(proxy):为其它对象提供一种代理以控制对该对象的访问。
    • 装饰模式(decorator):动态地给一个对象添加一些额外的职责,就增加功能来说,装饰模式比生成子类更为灵活。
    • 适配器模式(adapter):将一个类的接口变换成客户端所期待的另一个接口,从而使原本因接口不匹配而无法在一起工作的两个类能够在一起工作。
    • 组合模式(composite):也叫合成模式,将对象组合成树形结构,用于表示“部分--整体”的层次结构,使得用户对单个对象和组合对象的使用具有一致性。
    • 桥梁模式(bridge):也叫桥接模式,将抽象和实现解耦,使得两者可以独立变化。
    • 外观模式(facade):也叫门面模式,要求一个子系统的外部与其内部的通信必须通过一个统一的对象进行,外观模式提供一个高层次的接口,使得子系统更易于使用。
    • 享元模式(flyweight):是池技术的重要实现方式,使用共享对象可以有效地支持大量的细粒度的对象。
  3. 行为型

    行为型设计模式关注的是对象的行为,用来解决对象之间的联系问题,常见的行为设计模式有以下几种:

    • 模板方法模式(template method):定义一个操作中的算法的框架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构,就可以重定义该算法的某些特定步骤。
    • 命令模式(command):是一种高内聚的模式,将一个请求封装成一个对象,从而使用不同的请求将客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。
    • 责任链模式(chain of responsibility):使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递该请求,直到有对象处理它为止。
    • 策略模式(strategy):也叫政策模式,定义一组算法,将每个算法都封装起来,并且使它们之间可以互换。
    • 迭代器模式(iterator):提供一种方法访问一个容器对象中的各个元素,而又不需要暴露该对象的内部细节。
    • 中介者模式(mediator):用一个对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
    • 观察者模式(observer):也叫发布订阅模式,定义对象间的一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更新。
    • 备忘录模式(memento):在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。
    • 访问者模式(visitor):封装一些作用于某种数据结构中的各元素的操作,它可以在不改变数据结构的前提下,定义作用于这些元素的新的操作。
    • 状态模式(state):当一个对象内在的状态改变时允许其改变行为,这个对象看起来像改变了其类型,状态模式的核心是封装,状态的变更引起行为的变更。
    • 解释器模式(interpreter):给定一门语言,定义它文法的一种表示,并定义一个解释器,该解释器使用该文法表示,来解释语言中的句子。

设计模式小结

 

    1. 设计一个模式的过程就是将问题抽象化,忽略不重要的细节后发现问题的本质,并找到普遍使用的解决方案的过程。
    2. 设计模式起源于建筑设计学。
    3. 设计模式的基本要素有:名字、问题、初始环境、举例、末态环境、推理、其它有关模式、已知应用。
    4. 设计模式主要有23种,可以将这些模式分为三大类型:创建型、结构型和行为型。
    5. 创建型包括:单例模式、工厂方法模式、抽象工厂模式、建造者模式和原型模式。
    6. 结构型包括:代理模式、装饰模式、适配器模式、组合模式、桥梁模式、外观模式和享元模式。
    7. 行为型包括:模板方法模式、命令模式、责任链模式、策略模式、迭代器模式、中介者模式、观察者模式、备忘录模式、访问者模式、状态模式和解释器模式。

 

 

猜你喜欢

转载自860793364.iteye.com/blog/2305929