软件设计模式总复习
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
⑵、良好设计的特征:可扩展性、灵活性、可插入性
� � � 可扩展性:新功能容易加入,而且不会影响已有功能,即不“僵硬” 灵活性:修改一个地方,不会影响其他,即不“脆弱” 可插入性:用一个容易替换另一个类,只要它们实现相同接口即可,即低“黏度”
⑶、面向对象的三大特征:继承性、封装性、多态性
� � � 继承性: 特殊类的对象具有其一般类的对象的全部属性和行为, 即称特殊类对一般类的 继承。 封装性: 把对象的属性和行为组合成为一个独立的单位或部件, 并尽可能隐蔽对象的内 部细节,而只保留必要的对外接口,使之与外部发生联系。 多态性:是指不同类型的对象接收相同的消息时,产生不同的行为
产品族
一 个 产 品 族
Pc
PcRam
P cC pu
M ac
M acRam
M acC pu
Ram
C pu
产 品 等 级 结 构
2、类图:
ComputerProducer
createCpu() : Cpu createRam() : Ram <<realize>> <<realize>>
Ram
<<realize>> <<realize>>
软件设计模式总复习
软件设计模式总复习
一、设计目标:
⑴、软件设计目标:正确性、健壮性、灵活性、可重用性、高效性
� � � � � 正确性:也就是满足应用程序的需求。 健壮性: 是指软件对于规范要求以外的输入情况的处理能力。 也就是说, 在异常情况下, 软件能够正常运行的能力。 灵活性:就是可以允许代码修改平稳地发生,而不会波及到很多其他的模块。 可重用性:也就是重复使用的意思。 高效性:一般指两个方面,一是执行效率,二是存储效率。
�
�
�
三、设计模式:
⑴、软件设计模式的定义:
� � � 模式:是做事的一种方法,也即是实现某个目标的途径,或者技术。 设计模式:描述了软件设计过程中某一类常见问题的一般性的解决方案 设计模式:是类的联合体以及与之相伴的算法,这些算法能够实现共同的设计目标。 设 计模式表达了一种思想而不仅仅是固定的类联合体,相伴的算法表示模式的基本操作。
items : List createIterator() : Iterator size() : int getIndexValue(int) : Object setIndexValue(int, Object) : void
ConcreteIteratorDes
ca : ConcreteAggregate current : int ConcreteIteratorDes(ConcreteAggregate) first() : Object current() : Object next() : Object hasNext() : boolean
PcProducer
MacProducer
MacRam PcRam
<<realize>>
Cpu
<<realize>>
MacCpu
PcCpu
以上均为给个人总结,谨供参考!
-5-
软件设计模式总复习
� 适配器设计模式: 例:利用适配器“指方为圆”
� 迭代子模式: 例:公共汽车售票员工作的场景
Client
� 工厂方法设计模式: 例:女娲举绳造人的故事是应用工厂方法设计模式的一个实例。抽象角色“女娲神绳”是系统 的中心,但是它仅仅声明出“举绳造人”的方法,而没有实现它。真正做这个工作的是具体工 厂类, 也就是“阴绳”和“阳绳”类。 工厂方法模式在女娲举绳造人系统中的实现如下页图所示:
以上均为给个人总结,谨供参考!
� � � 创建型模式:以灵活的方式创建对象的集合,如:工厂模式、抽象工厂模式、建造者模 式、单件模式、原型模式等。 结构型模式:代表相关对象的集合,如:适配器模式、装饰模式、桥接模式、享元模式、 外观模式、代理模式、组合模式。 行为型模式:在对象集合中捕获行为,如:模板方法模式、观察者模式、迭代子模式、 责任链模式、备忘录模式、命令模式、状态模式、访问者模式、中介者模式、策略模式。
软件设计模式总复习
�
� �
�
� � �
Hale Waihona Puke Baidu
�
� � �
� � � �
�
它决定哪一个产品类应当被实例化。 这个模式的优点是允许客户端相对独立于产品创建 的过程,并且在系统引入新产品的时候无需修改客户端,也就是说,它在某种程度上支 持“开-闭”原则。 工厂方法设计模式: 是定义一个创建产品对象的工厂接口, 将实际创建工作推迟到子类 中。在软件系统中,经常面临着“某个对象”的创建工作;由于需求的变化,这个对象 经常面临着剧烈的变化,但是它却拥有比较稳定的接口。 抽象工厂设计模式: 提供一个创建一系列相关或相互依赖对象的接口, 而无需指定它们 具体的泪。抽象工厂模式主要是用于创建一个产品族,而不是一个一个具体的产品。 建造者模式: 将产品的内部表象与产品的生成过程分割开来, 从而可以使一个建造过程 生成具有不同的内部表象的产品对象。 也就是说, 它将一个复杂的构建与其表示相分离, 使得同样的构建过程可以创建不同的表示。 单件模式:一个类仅有一个实例,并提供一个访问它的全局访问点。也就是说,单件模 式的要点是:某个类只能有一个实例;它必须自行创建这个实例;它必须自行向整个系 统提供这个实例。 原型模式: 通过给出一个原型对象来指明所要创建的对象的类型, 然后用复制这个原型 对象的办法创建出更多类型的对象。 适配器设计模式:将接口不同而功能相同或相近的两个接口加以转换。 装饰模式: 装饰模式以对客户透明的方式动态地给一个对象附加上更多的责任。 换言之, 客户端并不会觉得对象在装饰前和装饰后有什么不同。 装饰模式可以在不使用创造更多 子类的情况下,将对象的功能加以扩展。 桥接模式:将抽象化与实现化脱耦,使得二者可以独立地变化。实现系统可能有多角度 分类,每一种分类都有可能变化,那么就把这种多角度分离出来让它们独立变化,减少 它们之间的耦合。 组合模式: 当需求中是体现部分与整体层次的结构时, 以及你希望用户可以忽略组合对 象与单个对象的不同, 统一地使用组合结构中的所有对象时, 就应该考虑到组合模式了。 模板方法模式: 当我们要完成某一细节层次一致的一个过程或一系列步骤, 但其个别步 骤在更详细的层次上的实现可能不同时,我们通常考虑用模板方法模式来处理。 观察者模式: 定义了一种一对多的依赖关系, 让多个观察者对象同时监听某一个主题对 象。这个主题对象在状态上发生变化时,会通知所有观察者对象,使它们能够自动更新 自己。 迭代子模式:通过设计一个迭代器,这个迭代器提供一种方法,可以顺序访问聚合对象 中的各个元素,但又不暴露该对象的内部表示。 责任链模式: 为解除请求者和接受者之间的耦合, 而使多个对象都有机会处理这个请求。 将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它。 备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保 存这个状态。这样以后就可以将该对象恢复到原先保存的状态。 命令模式:目的是解除命令发出者和接收者之间的耦合关系,是二者相对独立,有利于 程序的并行开发和代码的维护。 命令模式的核心思想是将请求封装一个对象, 将其作为 命令发起者和接受者的中介, 而抽象出来的命令对象又使我们能够对一些列请求进行某 些操作。 状态模式: 核心思想是允许一个对象在它的内部状态改变时改变它的行为, 即不同的状 态对应不同的行为,这需要将状态单独抽象为一个对象。
-4-
软件设计模式总复习
� 抽象工厂设计模式: 例:微型计算机配件的生产系统 此系统所需要的产品族有两个,一个系列是 PC,或称为 IBM 及 IBM 克隆机系列;另 一个系列是 MAC ,或称 MacIntosh 系列。产品等级结构有两个:一个是 RAM ,另一个是 CPU。 问题:1、请用相图对此系统进行描述; 2、请给出此系统的类图 1、相图:
⑵、面向对象设计模式的定义:
� � 面向对象设计模式:描述了面向对象设计过程中,特定场景下,类与相互通信的对象之 间常见的组织关系。 面向对象设计模式描述的是软件设计, 因此它是独立于编程语言的, 但是面向对象设计 模式的最终实现仍然要使用面向对象编程语言来表达
⑶、设计模式的分类:
①、依据设计模式的行为方式,也即其目的,将设计模式分为三种类型:创建型 模式、结构型模式、行为型模式:
-1-
�
软件设计模式总复习
⑵、利用设计原则进行俚语或习语的分析
� 接口隔离原则,分析“在官言官”: 指处在什么样的地位就说什么样的话。从接口隔离 原则的角度出发,身处不同的官位,应讲相应的话语,也即是需求不同,提供不同的实 现。这是一种应当得到鼓励的做法。 接口隔离原则,分析“只此一家,别无分店”: “原是一些店铺招揽生意的用语,向顾 客表明他没分店,只能在他这一家店里买到某种商品。泛指某种事物只有他那儿有, 别 处都没有。从接口隔离原则的角度出发,表时此家的接口是专一的,亦不是多元化、 功 能化的。从技术层面上来考虑,是合理的。 依赖倒置原则,分析“朝令夕改”: 意思是说,早晨发布的命令,晚上就改了。比喻经 常改变主张和做法, 一会儿一个样。 从依赖倒置原则角度出发, 高层的决策变动性较大, 这并不符合依赖倒置原则,不是我们应当鼓励的主张。 依赖倒置原则,分析“入乡随俗”: 意思是说,到一个地方,就顺从当地的习俗。从 DIP 角度出发,一个地方的习俗相当于是高层,而到一个地方后,应遵循当地的习俗。 这是符合 DIP 的,是我们应当鼓励的主张和做法。
<<abstract>>
Iterator
first() : Object current() : Object next() : Object hasNext() : boolean
<<abstract>>
Aggregate
createIterator() : Iterator
ConcreteIterator
⑸、设计模式结构图:
以上均为给个人总结,谨供参考!
-3-
软件设计模式总复习
� 简单工厂设计模式: 例:请使用简单工厂模式设计一个创建不同几何形状,如圆形、方形和三角形实例的描图员 (Art Tracer)系统。每个几何图形都要有画 draw()和擦去 erase()两个方法。当描图员接 到指令,要求创建不支持的几何图形时,要提出 BadShapeException 异常。
二、设计原则:
:单一职责原则 、开闭原则 、里氏替换原则 、接口 ⑴、软件设计原则 软件设计原则: 单一职责原则、 开闭原则、 里氏替换原则、 分离原则、依赖倒置原则
� � � � 单一职责原则(SRP) :一个类应该有且只有一个改变的理由,它要求“一个设计元素只 做一件事”。 开闭原则(OCP) :不修改原有类就能扩展一个类的行为。也就是说,一个软件实体应 当对扩展开放,对修改关闭。 里氏替换原则(LSP) :子类能替换其超类(is-a 关系) ,也就是说子类型(subtype)必 须能替换其基类型(base type) 。 接口分离原则(ISP) :使用多个专门的接口比使用单一的总接口更好;换言之,从一个 客户类的角度来讲:一个类对另外一个类的依赖性应当是建立在最小的接口之上的; 不 应该强迫客户程序依赖于它们不用的接口 依赖倒置原则( DIP ) :要依赖于抽象,不要依赖于具体:也就是说,抽象不应当依赖 于细节,细节应当依赖于抽象;要针对接口编程,不要针对实现编程。 以上均为给个人总结,谨供参考!
②、根据设计意图可分为五类:接口型设计模式、责任型设计模式、构造型设计 模式、操作型设计模式、扩展型设计模式。
) ⑷、设计模式的主要职责(意图 、设计模式的主要职责(意图) :
� 简单工厂设计模式: 一个工厂类处于对产品类实例化的中心位置上, 它知道每一个产品, 以上均为给个人总结,谨供参考!
-2-
ca : ConcreteAggregate current : int ConcreteIterator(ConcreteAggregate) first() : Object current() : Object next() : Object hasNext() : boolean
ConcreteAggregate