完整word版设计模式复习提纲.docx
《完整word版设计模式复习提纲.docx》由会员分享,可在线阅读,更多相关《完整word版设计模式复习提纲.docx(17页珍藏版)》请在冰豆网上搜索。
完整word版设计模式复习提纲
设计模式复习提纲
第一章
1.状态图的定义
状态图用来描述一个特定对象的所有可能状态及其引起状态转移的事件。
第二章
1.软件的可维护性和可复用性(?
)
软件可维护性,即维护人员对该软件进行维护的难易程度,具体包括理解、改正、改动和改进该软件的难易程度。
可复用性:
复用又叫重用,是重复使用的意思。
2.面向对象设计原则
(1)单一职责原则
(2)开闭原则
(3)里氏代换原则
(4)依赖倒转原则
(5)接口隔离原则
(6)合成复用原则
(7)迪米特法则
3.单一职责原则定义
单一职责原则定义:
一个对象应该只包含单一的职责,并且该职责被完整地封装在一个类中。
另一种定义:
就一个类而言,应该仅有一个引起它变化的原因。
4.开闭原则定义
开闭原则定义:
一个软件实体应当对扩展开放,对修改关闭。
5.里氏代换原则定义
里氏代换原则有两种定义方式。
第一种定义方式相对严格,其定义如下:
如果对每一个类型为S的对象o1,都有类型为T的对象o2,使得以T定义的所有程序P在所有的对象o1都代换成o2时,程序P的行为没有变化,那么类型S是类型T的子类型。
第二种更容易理解的定义方式如下:
所有引用基类(父类)的地方必须能透明地使用其子类的对象。
6.依赖倒转原则定义
依赖倒转原则定义:
高层模块不应该依赖低层模块,它们都应该依赖抽象。
抽象不应该依赖于细节,细节应该依赖于抽象。
另一种表述为:
要针对接口编程,不要针对实现编程。
7.接口隔离原则定义
接口隔离原则定义:
客户端不应该依赖那些它不需要的接口。
注意:
在该定义中的接口指的是所定义的方法。
另一种定义方法:
一旦一个接口太大,则需要将它分割成一些更细小的接口,使用该接口的客户端仅需知道与之相关的方法即可。
8.合成复用原则定义
合成复用原则,又称为组合/聚合复用原则,其定义如下:
尽量使用对象组合,而不是继承来达到复用的目的。
9.迪米特法则定义
迪米特法则,又称为最少知识原则,它有多种定义方法,其中几种典型定义如下:
(1)不要和“陌生人”说话。
(2)只与你的直接朋友通信。
(3)每一个软件单位对其他的单位都只有最少的知识,而且局限于那些与本单位密切相关的软件单位。
第三章
1.模式的定义
每个模式都描述了一个在我们的环境中不断出现的问题,然后描述了该问题的解决方案的核心,通过这种方式,我们可以无数次地重用那些已有的解决方案,无需再重复相同的工作。
可以用一句话简单表示为:
模式是在特定环境中解决问题的一种方案。
2.设计模式的定义
设计模式是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结,使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代码可靠性。
3.设计模式的基本要素
设计模式一般有如下几个基本要素:
模式名称、问题、目的、解决方案、效果、实例代码和相关设计模式,其中的关键元素包括以下四个方面:
模式名称、问题、解决方案、效果。
4.设计模式的分类
(1)根据其目的(模式是用来做什么的)可分为创建型、结构型和行为型三种:
①创建型模式主要用于创建对象。
②结构型模式主要用于处理类或对象的组合。
③行为型模式主要用于描述对类或对象怎样交互和怎样分配职责。
(2)根据范围,即模式主要是用于处理类之间关系还是处理对象之间的关系,可分为类模式和对象模式两种:
①类模式处理类和子类之间的关系,这些关系通过继承建立,在编译时刻就被确定下来,是属于静态的。
②对象模式处理对象间的关系,这些关系在运行时刻变化,更具动态性。
5.GoF设计模式简介
GoF最先将模式的概念引入软件工程领域,他们归纳发表了23种在软件开发中使用频率较高的设计模式,旨在用模式来统一沟通面向对象方法在分析、设计和实现间的鸿沟。
6.设计模式的优点
设计模式是从许多优秀的软件系统中总结出的成功的、能够实现可维护性复用的设计方案,使用这些方案将避免我们做一些重复性的工作,而且可以设计出高质量的软件系统。
设计模式的主要优点如下:
(1)设计模式融合了众多专家的经验,并以一种标准的形式供广大开发人员所用,它提供了一套通用的设计词汇和一种通用的语言以方便开发人员之间沟通和交流,使得设计方案更加通俗易懂。
对于使用不同编程语言的开发和设计人员可以通过设计模式来交流系统设计方案,每一个模式都对应一个标准的解决方案,设计模式可以降低开发人员理解系统的复杂度。
(2)设计模式使人们可以更加简单方便地复用成功的设计和体系结构,将已证实的技术表述成设计模式也会使新系统开发者更加容易理解其设计思路。
设计模式使得重用成功的设计更加容易,并避免那些导致不可重用的设计方案。
(3)设计模式使得设计方案更加灵活,且易于修改。
(4)设计模式的使用将提高软件系统的开发效率和软件质量,且在一定程度上节约设计成本。
(5)设计模式有助于初学者更深入地理解面向对象思想,一方面可以帮助初学者更加方便地阅读和学习现有类库与其他系统中的源代码,另一方面还可以提高软件的设计水平和代码质量。
补充:
7.设计模式主题:
复用与扩展。
8.设计模式基本原则(?
)
同面向对象设计原则。
广义工厂模式包括:
简单工厂模式、工厂方法模式、抽象工厂模式。
第4章简单工厂模式——不是GoF23种模式中的一员
补充:
创建型模式概述:
创建型模式对类的实例化过程进行了抽象,能够将软件模块中对象的创建和对象的使用分离。
创建型模式在创建什么(What),由谁创建(Who),何时创建(When)等方面都为软件设计者提供了尽可能大的灵活性。
创建型模式隐藏了类的实例的创建细节,通过隐藏对象如何被创建和组合在一起达到使整个系统独立的目的。
1.定义:
简单工厂模式:
又称为静态工厂方法模式,它属于类创建型模式。
在简单工厂模式中,可以根据参数的不同返回不同类的实例。
简单工厂模式专门定义一个类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。
2.结构图:
3.主要优缺点:
简单工厂模式最大的优点在于实现对象的创建和对象的使用分离,将对象的创建交给专门的工厂类负责;但是其最大的缺点在于工厂类不够灵活,增加新的具体产品需要修改工厂类的判断逻辑代码,而且产品较多时,工厂方法代码将会非常复杂。
第5章工厂方法模式
1.定义:
工厂方法模式又称为工厂模式,也叫虚拟构造器模式或者多态工厂模式,它属于类创建型模式。
在工厂方法模式中,工厂父类负责定义创建产品对象的公共接口,而工厂子类则负责生成具体的产品对象,这样做的目的是将产品类的实例化操作延迟到工厂子类中完成,即通过工厂子类来确定究竟应该实例化哪一个具体产品类。
2.结构图:
3.主要优缺点:
工厂方法模式的主要优点是增加新的产品类时无须修改现有系统,并封装了产品对象的创建细节,系统具有良好的灵活性和可扩展性;其缺点在于增加新产品的同时需要增加新的工厂,导致系统类的个数成对增加,在一定程度上增加了系统的复杂性。
第6章抽象工厂模式
1.定义:
抽象工厂模式:
提供一个创建一系列相关或相互依赖对象的接口,而无须指定它们具体的类。
抽象工厂模式又称为Kit模式,属于对象创建型模式。
2.结构图:
3.主要优缺点:
抽象工厂模式的主要优点是隔离了具体类的生成,使得客户并不需要知道什么被创建,而且每次可以通过具体工厂类创建一个产品族中的多个对象,增加或者替换产品族比较方便,增加新的具体工厂和产品族很方便;主要缺点在于增加新的产品等级结构很复杂,需要修改抽象工厂和所有的具体工厂类,对“开闭原则”的支持呈现倾斜性。
第7章建造者模式
1.定义:
建造者模式:
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
建造者模式是一步一步创建一个复杂的对象,它允许用户只通过指定复杂对象的类型和内容就可以构建它们,用户不需要知道内部的具体构建细节。
建造者模式属于对象创建型模式。
根据中文翻译的不同,建造者模式又可以称为生成器模式。
2.结构图:
3.主要优缺点:
建造者模式的主要优点在于客户端不必知道产品内部组成的细节,将产品本身与产品的创建过程解耦,使得相同的创建过程可以创建不同的产品对象,每一个具体建造者都相对独立,而与其他的具体建造者无关,因此可以很方便地替换具体建造者或增加新的具体建造者,符合“开闭原则”,还可以更加精细地控制产品的创建过程;其主要缺点在于由于建造者模式所创建的产品一般具有较多的共同点,其组成部分相似,因此其使用范围受到一定的限制,如果产品的内部变化复杂,可能会导致需要定义很多具体建造者类来实现这种变化,导致系统变得很庞大。
第8章原型模式
1.定义:
原型模式:
原型模式是一种对象创建型模式,用原型实例指定创建对象的种类,并且通过复制这些原型创建新的对象。
原型模式允许一个对象再创建另外一个可定制的对象,无须知道任何创建的细节。
原型模式的基本工作原理是通过将一个原型对象传给那个要发动创建的对象,这个要发动创建的对象通过请求原型对象拷贝原型自己来实现创建过程。
2.结构图:
3.主要优缺点:
原型模式最大的优点在于可以快速创建很多相同或相似的对象,简化对象的创建过程,还可以保存对象的一些中间状态;其缺点在于需要为每一个类配备一个克隆方法,因此对已有类进行改造比较麻烦,需要修改其源代码,并且在实现深克隆时需要编写较为复杂的代码。
第9章单例模式
1.定义:
单例模式:
单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统提供这个实例,这个类称为单例类,它提供全局访问的方法。
单例模式的要点有三个:
一是某个类只能有一个实例;二是它必须自行创建这个实例;三是它必须自行向整个系统提供这个实例。
单例模式是一种对象创建型模式。
单例模式又名单件模式或单态模式。
2.结构图:
3.主要优缺点:
单例模式的主要优点在于提供了对唯一实例的受控访问并可以节约系统资源;其主要缺点在于因为缺少抽象层而难以扩展,且单例类职责过重。
第10章适配器模式
补充:
结构型模式概述:
结构型模式(StructuralPattern)描述如何将类或者对象结合在一起形成更大的结构,就像搭积木,可以通过简单积木的组合形成复杂的、功能更为强大的结构。
结构型模式可以分为类结构型模式和对象结构型模式:
类结构型模式关心类的组合,由多个类可以组合成一个更大的系统,在类结构型模式中一般只存在继承关系和实现关系。
对象结构型模式关心类与对象的组合,通过关联关系使得在一个类中定义另一个类的实例对象,然后通过该对象调用其方法。
根据“合成复用原则”,在系统中尽量使用关联关系来替代继承关系,因此大部分结构型模式都是对象结构型模式。
1.定义:
适配器模式:
将一个接口转换成客户希望的另一个接口,适配器模式使接口不兼容的那些类可以一起工作,其别名为包装器。
适配器模式既可以作为类结构型模式,也可以作为对象结构型模式。
2.结构图:
3.主要优缺点:
适配器模式的主要优点是将目标类和适配者类解耦,增加了类的透明性和复用性,同时系统的灵活性和扩展性都非常好,更换适配器或者增加新的适配器都非常方便,符合“开闭原则”;类适配器模式的缺点是适配器类在很多编程语言中不能同时适配多个适配者类,对象适配器模式的缺点是很难置换适配者类的方法。
第11章桥接模式
1.定义:
桥接模式:
将抽象部分与它的实现部分分离,使它们都可以独立地变化。
它是一种对象结构型模式,又称为柄体模式或接口模式。
2.结构图:
3.主要优缺点:
桥接模式的主要优点是分离抽象接口及其实现部分,是比多继承方案更好的解决方法,桥接模式还提高了系统的可扩充性,在两个变化维度中任意扩展一个维度,都不需要修改原有系统,实现细节对客户透明,可以对用户隐藏实现细节;其主要缺点是增加系统的理解与设计难度,且识别出系统中两个独立变化的维度并不是一件容易的事情。
第12章组合模式
1.定义:
组合模式:
组合多个对象形成树形结构以表示“整体-部分”的结构层次。
组合模式对单个对象(即叶子对象)和组合对象(即容器对象)的使用具有一致性。
组合模式又可以称为“整体-部分”模式,属于对象的结构模式,它将对象组织到树结构中,可以用来描述整体与部分的关系。
2.结构图:
3.主要优缺点:
组合模式的主要优点在于可以方便地对层次结构进行控制,客户端调用简单,客户端可以一致的使用组合结构或其中单个对象,用户就不必关心自己处理的是单个对象还是整个组合结构,简化了客户端代码;其缺点在于使设计变得更加抽象,且增加新构件时可能会产生一些问题,而且很难对容器中的构件类型进行限制。
第13章装饰模式
1.定义:
装饰模式:
动态地给一个对象增加一些额外的职责,就增加对象功能来说,装饰模式比生成子类实现更为灵活。
其别名也可以称为包装器,与适配器模式的别名相同,但它们适用于不同的场合。
根据翻译的不同,装饰模式也有人称之为“油漆工模式”,它是一种对象结构型模式。
2.结构图:
3.主要优缺点:
装饰模式的主要优点在于可以提供比继承更多的灵活性,可以通过一种动态的方式来扩展一个对象的功能,并通过使用不同的具体装饰类以及这些装饰类的排列组合,可以创造出很多不同行为的组合,而且具体构件类与具体装饰类可以独立变化,用户可以根据需要增加新的具体构件类和具体装饰类;其主要缺点在于使用装饰模式进行系统设计时将产生很多小对象,而且装饰模式比继承更加易于出错,排错也很困难,对于多次装饰的对象,调试时寻找错误可能需要逐级排查,较为烦琐。
第14章外观模式
1.定义:
外观模式:
外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。
外观模式又称为门面模式,它是一种对象结构型模式。
2.结构图:
3.主要优缺点:
外观模式主要优点在于对客户屏蔽子系统组件,减少了客户处理的对象数目并使得子系统使用起来更加容易,它实现了子系统与客户之间的松耦合关系,并降低了大型软件系统中的编译依赖性,简化了系统在不同平台之间的移植过程;其缺点在于不能很好地限制客户使用子系统类,而且在不引入抽象外观类的情况下,增加新的子系统可能需要修改外观类或客户端的源代码,违背了“开闭原则”。
第15章享元模式
1.定义:
享元模式:
运用共享技术有效地支持大量细粒度对象的复用。
系统只使用少量的对象,而这些对象都很相似,状态变化很小,可以实现对象的多次复用。
由于享元模式要求能够共享的对象必须是细粒度对象,因此它又称为轻量级模式,它是一种对象结构型模式。
2.结构图:
3.主要优缺点:
享元模式主要优点在于它可以极大减少内存中对象的数量,使得相同对象或相似对象在内存中只保存一份;其缺点是使得系统更加复杂,并且需要将享元对象的状态外部化,而读取外部状态使得运行时间变长。
第16章代理模式
1.定义:
代理模式:
给某一个对象提供一个代理,并由代理对象控制对原对象的引用。
代理模式的英文叫做Proxy或Surrogate,它是一种对象结构型模式。
2.结构图:
3.主要优缺点:
代理模式的优点在于能够协调调用者和被调用者,在一定程度上降低了系统的耦合度;其缺点在于由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢,并且实现代理模式需要额外的工作,有些代理模式的实现非常复杂。
第17章职责链模式
补充:
行为型模式概述:
行为型模式是对在不同的对象之间划分责任和算法的抽象化。
行为型模式不仅仅关注类和对象的结构,而且重点关注它们之间的相互作用。
通过行为型模式,可以更加清晰地划分类与对象的职责,并研究系统在运行时实例对象之间的交互。
在系统运行时,对象并不是孤立的,它们可以通过相互通信与协作完成某些复杂功能,一个对象在运行时也将影响到其他对象的运行。
行为型模式分为类行为型模式和对象行为型模式两种:
(1)类行为型模式:
类的行为型模式使用继承关系在几个类之间分配行为,类行为型模式主要通过多态等方式来分配父类与子类的职责。
(2)对象行为型模式:
对象的行为型模式则使用对象的聚合关联关系来分配行为,对象行为型模式主要是通过对象关联等方式来分配两个或多个类的职责。
根据“合成复用原则”,系统中要尽量使用关联关系来取代继承关系,因此大部分行为型设计模式都属于对象行为型设计模式。
1.定义:
职责链模式:
避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。
由于英文翻译的不同,职责链模式又称为责任链模式,它是一种对象行为型模式。
2.结构图:
3.主要优缺点:
职责链模式的主要优点在于可以降低系统的耦合度,简化对象的相互连接,同时增强给对象指派职责的灵活性,增加新的请求处理类也很方便;其主要缺点在于不能保证请求一定被接收,且对于比较长的职责链,请求的处理可能涉及到多个处理对象,系统性能将受到一定影响,而且在进行代码调试时不太方便。
第18章命令模式
1.定义:
命令模式:
将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。
命令模式是一种对象行为型模式,其别名为动作模式或事务模式。
2.结构图:
3.主要优缺点:
命令模式的主要优点在于降低系统的耦合度,增加新的命令很方便,而且可以比较容易地设计一个命令队列和宏命令,并方便地实现对请求的撤销和恢复;其主要缺点在于可能会导致某些系统有过多的具体命令类。
第19章解释器模式
1.定义:
解释器模式:
定义语言的文法,并且建立一个解释器来解释该语言中的句子,这里的“语言”意思是使用规定格式和语法的代码,它是一种类行为型模式。
2.结构图:
3.主要优缺点:
解释器模式的主要优点包括易于改变和扩展文法,易于实现文法并增加了新的解释表达式的方式;其主要缺点是对于复杂文法难以维护,执行效率较低且应用场景很有限。
第二十章迭代器模式
1.定义:
迭代器模式:
提供一种方法来访问聚合对象,而不用暴露这个对象的内部表示,其别名为游标。
迭代器模式是一种对象行为型模式。
2.结构图:
3.主要优缺点:
迭代器模式的主要优点在于它支持以不同的方式遍历一个聚合对象,还简化了聚合类,而且在同一个聚合上可以有多个遍历;其缺点在于增加新的聚合类需要对应增加新的迭代器类,类的个数成对增加,这在一定程度上增加了系统的复杂性。
第二十一章中介者模式
1.定义:
中介者模式定义:
用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
中介者模式又称为调停者模式,它是一种对象行为型模式。
2.结构图:
3.主要优缺点:
中介者模式的主要优点在于简化了对象之间的交互,将各同事解耦,还可以减少子类生成,对于复杂的对象之间的交互,通过引入中介者,可以简化各同事类的设计和实现;中介者模式主要缺点在于具体中介者类中包含了同事之间的交互细节,可能会导致具体中介者类非常复杂,使得系统难以维护。
第二十二章备忘录模式
1.定义:
备忘录模式:
在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。
它是一种对象行为型模式,其别名为Token。
2.结构图:
3.主要优缺点:
备忘录模式的主要优点在于它提供了一种状态恢复的实现机制,使得用户可以方便地回到一个特定的历史步骤,还简化了原发器对象,备忘录只保存原发器的状态,采用堆栈来存储备忘录对象可以实现多次撤消操作,可以通过在负责人中定义集合对象来存储多个备忘录;备忘录模式的主要缺点在于资源消耗过大,因为每一个历史状态的保存都需要一个备忘录对象。
第二十三章观察者模式
1.定义:
观察者模式:
定义对象间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。
观察者模式又叫做发布-订阅模式、模型-视图模式、源-监听器模式或从属者模式。
观察者模式是一种对象行为型模式。
2.结构图:
3.主要优缺点:
观察者模式的主要优点在于可以实现表示层和数据逻辑层的分离,并在观察目标和观察者之间建立一个抽象的耦合,支持广播通信;其主要缺点在于如果一个观察目标对象有很多直接和间接的观察者的话,将所有的观察者都通知到会花费很多时间,而且如果在观察者和观察目标之间有循环依赖的话,观察目标会触发它们之间进行循环调用,可能导致系统崩溃。
第二十四章状态模式
1.定义:
状态模式:
允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。
其别名为状态对象,状态模式是一种对象行为型模式。
2.结构图:
3.主要优缺点:
状态模式的主要优点在于封装了转换规则,并枚举可能的状态,它将所有与某个状态有关的行为放到一个类中,并且可以方便地增加新的状态,只需要改变对象状态即可改变对象的行为,还可以让多个环境对象共享一个状态对象,从而减少系统中对象的个数;其缺点在于使用状态模式会增加系统类和对象的个数,且状态模式的结构与实现都较为复杂,如果使用不当将导致程序结构和代码的混乱,对于可以切换状态的状态模式不满足“开闭原则”的要求。
第二十五章策略模式
1.定义:
策略模式:
定义一系列算法,将每一个算法封装起来,并让它们可以相互替换。
策略模式让算法独立于使用它的客户而变化,也称为政策模式。
策略模式是一种对象行为型模式。
2.结构图:
3.主要优缺点:
策略模式主要优点在于对“开闭原则”的完美支持,在不修改原有系统的基础上可以更换算法或者增加新的算法,它很好地管理算法族,提高了代码的复用性,是一种替换继承,避免多重条件转移语句的实现方式;其缺点在于客户端必须知道所有的策略类,并理解其区别,同时在一定程度上增加了系统中类的个数,可能会存在很多策略类。
第二十六章模板方法模式
1.定义:
模板方法模式:
定义一个操作中算法的骨架,而将一些步骤延迟到子类中,模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。
模板方法是一种类行为型模式。
2.结构图:
3.主要优缺点:
模板方法模式的优点在于在子类定义详细的处理算法时不会改变算法的结构,实现了代码的复用,通过对子类的扩展可以增加新的行为,符合“开闭原则”;其缺点在于需要为每个不同的实现都定义一个子类,这会导致类的个数增加,系统更加庞大,设计也更加抽象。
第二十七章访问者模式
1.定义:
访问者模式:
表示一个作用于某对象结构中的各元素的操作,它使我们可以在不改变各元素的类的前提下定义作用于这些元素的新操作。
访问者模式是一种对象行为型模式。
2.结构图:
3.主要优缺点:
访问者模式的主要优点在于使得增加新的访问操作变得很容易,将有关元素对象的访问行为集中到一个访问者对象中,而不是分散到一个个的元素类中,还可以跨过类的等级结构访问属于不同的等级结构的元素类,让用户能够在不修改现有类层次结构的情况下,定义该类层次结构的操作;其主要缺点在于增加新的元素类很困难,而且在一定程度上破坏系统的封装性。