`

设计模式概念

阅读更多

设计模式概念

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

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

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

 

设计模式要素

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

  • 模式名称(pattern name)

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

 

  • 问题(problem)

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

 

  • 解决方案(solution)

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

 

  • 效果(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. 行为型包括:模板方法模式、命令模式、责任链模式、策略模式、迭代器模式、中介者模式、观察者模式、备忘录模式、访问者模式、状态模式和解释器模式。

 

 

0
0
分享到:
评论

相关推荐

    MVC设计模式概念及优缺点

    ### MVC设计模式概念及优缺点 #### 一、MVC设计模式的概念 MVC(Model-View-Controller)设计模式是一种广泛应用于软件工程中的架构模式,尤其在Web开发领域非常流行。该模式的核心理念在于将应用程序划分为三个...

    设计模式期末试题下载

    ### 设计模式概念 1. **定义**:设计模式是面向对象设计中一种常用的解决特定问题的方法论。它是对软件设计中重复出现的问题及其解决方案的描述。设计模式不是完成任务的具体代码,而是一种用来解决常见问题的通用...

    深入浅出设计模式(HEAD_FIRST设计模式)电子书+java代码

    《深入浅出设计模式》是基于HEAD FIRST系列的著名设计模式教程,专为初学者打造,旨在用生动直观的方式帮助读者理解复杂的设计模式概念。这本书以其独特的图文并茂的讲解方式,使得学习过程更为轻松有趣。书中涵盖了...

    图解Java设计模式.zip

    图解法是一种强大的教学工具,通过图表,复杂的设计模式概念可以变得清晰易懂。比如,用图形表示对象之间的关系,可以帮助我们更好地理解它们之间的交互和依赖。对于初学者来说,这比阅读纯文字描述更容易理解和记忆...

    eclipse 设计模式 plugin

    总结,Eclipse 3.3 设计模式插件是提升开发者设计能力的重要工具,它将抽象的设计模式概念与实际代码紧密联系,使得设计模式的学习和应用变得更加直观和高效。通过熟练掌握并运用这款插件,开发者可以更好地遵循最佳...

    HeadFirst设计模式英文版

    本章还包括了对现实生活中设计模式的应用实例的观察与讨论,以此加深对设计模式概念的理解。 整本书籍涵盖了23种设计模式,包括创建型模式、结构型模式和行为型模式,每种模式都通过实际的编程示例进行了详细的讲解...

    软件设计模式完整版

    Christopher Alexander 的思想为设计模式的理论奠定了基础,他提出的设计模式概念最初应用于建筑设计,后来被引入到软件工程领域。随着面向对象编程语言的普及,越来越多的设计模式被发掘和归纳出来,形成了一个丰富...

    中文版_源码设计模式解析与实战.pdf

    这本书不仅涵盖了基础的设计模式概念,还通过丰富的实例,尤其是Android系统源码中的实例,帮助读者理解并掌握这些模式的实际运用。 1. **设计模式基础**:书中首先介绍了设计模式的基本概念,它是软件工程中解决...

    设计模式和架构\Head.First设计模式02

    虽然给定的文件信息没有直接涉及设计模式的具体内容,但通过上述对设计模式概念、重要性以及《Head First 设计模式》一书的介绍,我们已经能够理解设计模式在软件开发中的核心价值。设计模式不仅是一种工具,更是一...

    Head.First设计模式_PDF

    《Head First设计模式》是一本深受开发者欢迎的设计模式学习书籍,以其独特的教学方式,通过丰富的图解和幽默的叙述,使复杂的设计模式概念变得生动易懂。这本书主要讲解了面向对象设计中的23种经典设计模式,是软件...

    HeadFirst设计模式(高清中文版)

    本书以HeadFirst独特的教学风格,将复杂的设计模式概念转化为易于理解的形式,结合丰富的图像和幽默的插图,使学习过程更加生动有趣。书中详细讲解了以下几种主要的设计模式: 1. 创建型模式:单例模式、工厂方法...

    Learning+PHP设计模式

    第3章 基本设计模式概念 第4章 结合使用设计模式和UML 第2部 分创建型设计模式 第5章 工厂方法设计模式 第6章 原型设计模式 第3部分 结构型设计模式 第7章 适配器模式 第8章 装饰器设计模式 第4部分 行为型...

    《Java多线程设计模式》附源码中文教程 (PDF)

    多线程与并发处理是程序设计好坏优劣的重要课题,本书通过浅显易懂的文字与实例来介绍Java线程相关的设计模式概念,并且通过实际的Java程序范例和 UML图示来一一解说,书中在代码的重要部分加上标注使读者更加容易...

    JAVA设计模式之禅+源代码.rar

    《JAVA设计模式之禅》是一本深入浅出地讲解JAVA设计模式的书籍,结合了中国的古典故事,使得抽象的设计模式概念变得生动形象,易于理解。设计模式是软件工程中的重要概念,它们是针对常见问题的解决方案,经过时间和...

    对设计模式的十大误解

    这种误解源于对设计模式概念的简化处理,试图将其归类为已知的软件开发元素,如行话、规则或技巧。实际上,设计模式远不止于此,它们是对软件设计中普遍存在的问题和解决方案的抽象化和系统化描述。模式包含了问题的...

    追MM与C++设计模式

    这种寓教于乐的方式不仅增加了学习的乐趣,也使抽象的设计模式概念变得更容易理解和记忆。 #### 六、结语 通过本文的解析,我们可以看到,将设计模式与现实生活情景相结合是一种非常有效的学习方法。对于初学者而言...

    head first 设计模式

    这本书以生活化的例子,如鸭子、气象站和咖啡店等场景,将抽象的设计模式概念具象化,让读者在轻松愉快的氛围中学习。 1. **鸭子示例**:鸭子案例引入了行为模式,如策略模式和观察者模式。策略模式允许动态地改变...

    Java 经典设计模式讲解以及项目实战

    设计模式简介:主要介绍各种设计模式的概念和运用场景等 设计模式综合运用:主要是笔者在实际工作中运用到的一些设计模式综合运用事例的提炼 Spring设计模式简介:主要是讲述Spring源码中运用到的一些设计模式 ...

Global site tag (gtag.js) - Google Analytics