LUOYANG NORMAL UNIVERSITY
2010-2011-2 课程考查论文
设计模式之我见
院 ( 系 ) 名 称
信息技术学院
专 业 名 称 软件工程 2008 级
软件工程专升本 2010 级
学 生 姓 名
张磊
学
号
101162047
任 课 教 师
宋 振 方
完 成 时 间
2011 年 06 月
设计模式课程
目录
第 1 章 面向对象思想.......................................................................................................... 1
1.1 面向对象思想的背景.................................................................................................1
1.2 面向对象的特征.........................................................................................................1
第 2 章 设计模式的原则...................................................................................................... 3
2.1 面向对象思想的背景.................................................................................................3
2.1.1 面向对象的基本概念......................................................................................... 3
2.2 设计模式的原则............................................................................................................ 4
2.2.1 "开-闭"原则....................................................................................................... 4
2.2.2 可变性的封闭原则........................................................................................... 4
2.2.3 里氏代换原则................................................................................................... 4
2.2.4 依赖倒转原则................................................................................................... 4
2.2.5 迪米特法则.......................................................................................................... 5
2.2.6 接口隔离法则................................................................................................... 5
第 3 章 印象深刻的模式...................................................................................................... 6
3.1 创建型模式.................................................................................................................6
3.1.1 抽象工厂模式..................................................................................................... 6
3.1.2 抽象工厂模式的结构......................................................................................... 6
3.1.3 抽象工厂模式的 UML 类图................................................................................. 7
3.1.4 抽象工厂模式优点............................................................................................. 7
3.1.5 适合使用抽象工厂模式的情景......................................................................... 7
3.1.6 抽象工厂模式的应用......................................................................................... 7
3.2 行为型模式...............................................................................................................11
3.2.1 命令模式........................................................................................................... 11
3.2.2 命令模式的结构............................................................................................... 11
3.2.3 命令模式的 UML 类图....................................................................................... 12
3.2.4 命令模式优点................................................................................................... 12
3.2.5 适合使用命令模式的情景............................................................................... 12
3.2.6 命令模式的应用............................................................................................... 12
3.3 结构型模式.............................................................................................................14
3.3.1 适配器模式....................................................................................................... 14
3.3.2 适配器模式的结构........................................................................................... 15
3.3.3 适配器模式的 UML 类图................................................................................... 15
3.3.4 适配器的适配程序........................................................................................... 15
3.3.5 适配器模式优点............................................................................................... 15
3.3.6 适合使用适配器模式的情景........................................................................... 16
I
洛阳师范学院 2011 届本科生毕业设计
3.3.7 适配器模式的应用........................................................................................... 16
总结与展望.......................................................................................................................... 18
4.1 总结...........................................................................................................................18
4.2 展望...........................................................................................................................18
参考文献.............................................................................................................................. 19
致 谢.................................................................................................................................. 20
II
设计模式之我见
第 1 章 面向对象思想
1.1 面向对象思想的背景
早期计算机中运行的程序大都是为特定的硬件系统专门设计的,称为面向机器的程
序。这类程序运行速度和效率都很高,但是可读性和可移植性都很差,随着软件开发规模
的扩大,这类面向机器的程序逐渐被以 C 为代表的面向过程的程序所取代。
面向过程问题求解的核心组成是数据结构和算法。数据结构利用计算机的离散逻辑
来量化表达需要解决的问题,而算法则研究如何快捷、高效地组织解决问题的具体过程。
面向过程的程序设计是以具体的解决问题过程为研究和实现的主体,可以精确完备地描述
具体的求解过程,但却不足以把一个包含了多个相互关联的过程的复杂系统表达清楚。
面积对象的程序设计不仅关心孤立的单个过程,还关心包含这些过程的复杂系统,
它能够使计算机逻辑来模拟描述系统本身,包括系统的组成、系统的各种可能状态,以及
系统中可能产生和各种过程与过程引起的系统状态切换。
1.2 面向对象的特征
面向对象的特征有四点,分别如下:
1、对象唯一性
每个对象都有自身唯一的标识,通过这种标识,可找到相应对象。在对象的
整个生命期中,它的标识都不改变,不同的对象不能有相同的标识。
2、抽象性
分类性是指将具有一致的数据结构和行为的对象抽象成类。一个类就这样和种
抽象,它反映了与应用有关的重要性质,而忽略其他一些无关内容。任何类的划
分都是主观的,但必须与具体的应用有关。
3、继承性
继承性子类自动共享父类数据结构和方法的机制,这是类之间的一种关系。
在定义和实现一个类的时候,可以在一个已经存在的类的基础之上来时行,把这
个已经存在的类所定义的内容作为自己的内容,并加入若干新的内容。
继承性是面积对象程序设计语言不同于其它语言的最重要的特点,是其他语言
所没有的。在类层次中,子类只继承一个父类的数据结构和方法,则称为单重继
承。在类层次中,子类继承了多个父类的数据结构和方法,则称为多重继承。在
软件开发中,类的继承性使所建立的软件具有开放性、可扩充性,这是信息组织
与分类的行之有效的方法,它简化了对象、类的创建工作量,增加了代码的可重
性。采用继承性,提供了类的规范的等级结构。通过类的继承关系,使公共的特
性能够共享,提高了软件的重用性。
4、多态性
多态性使指相同的操作或函数、过程可作用于多种类型的对象上并获得不同
的结果。不同的对象,收到同一消息可以产生不同的结果,这种现象称为多态性。
多态性允许每个对象以适合自身的方式去响应共同的消息,增强了软件的灵
1
活性重用性。
洛阳师范学院 2011 届本科生毕业设计
第 2 章 设计模式的原则
2.1 面向对象思想的背景
早期计算机中运行的程序大都是为特定的硬件系统专门设计的,称为面向机器
的程序。这类程序运行速度和效率都很高,但是可读性和可移植性都很差,随着软
件开发规模的扩大,这类面向机器的程序逐渐被以 C 为代表的面向过程的程序所取
代。
面向过程问题求解的核心组成是数据结构和算法。数据结构利用计算机的离散
逻辑来量化表达需要解决的问题,而算法则研究如何快捷、高效地组织解决问题的
具体过程。面向过程的程序设计是以具体的解决问题过程为研究和实现的主体,可
以精确完备地描述具体的求解过程,但却不足以把一个包含了多个相互关联的过程
的复杂系统表达清楚。面积对象的程序设计不仅关心孤立的单个过程,还关心包含
这些过程的复杂系统,它能够使计算机逻辑来模拟描述系统本身,包括系统的组成、
系统的各种可能状态,以及系统中可能产生和各种过程与过程引起的系统状态切换。
2.1.1 面向对象的基本概念
1、类与对象
类是一种复杂的数据类型,它是将数据和与数据相关的操作封装在一起的
集合体。类是普通数据类型的扩展,它不但包含数据,还包含对数据进行操作
的方法。方法反映的是数据的行为而不是数据本身。
对象是类的实例,它是类的变量。当程序运行时,对象占用内存单元。对
象与类是密切相关的,没有脱离对象的类,也没有不依赖于类的对象。
2、成员
在 Java 语言中,一切事物都是对象。实际上对于每个对象都有一个抽象
过程。所谓抽象,就是选取描述事物在现实世界中相关特征的过程。任何事物
一定存在三类信息:
属性信息:静态刻画对象特征。
操作信息:动态刻画对象特征。
约束信息:描述对象可以存在的状态。
为了使得计算机能够处理客观事物,必须对事物进行抽象。在事物抽象过
程中,必须忽略那些抽象事物与当前目的无关的特征,只需要关注与当前需求
有直接影响的因素。
3、类的核心特征
封装、继承和多态是类的三个核心特性。
封装即信息的隐藏,是面向对象程序设计中一个非常重要的概念。封装的
目的是:隐藏类的实现细节,以防别人误用;迫使用户通过接口去访问数据;
增强代码的可维护性。
继承机制提供了一种无限重复利用程序资源的径。通过继承可以扩充旧的
2
程序以适应新的需求,这样不仅节省程序开发时间,而且为未来程序设计增添
设计模式之我见
了新资源。
多态就是多种形态的意思,是指一个程序中使用相同名字定义了不同的方
法。多态性允许以统一的风格处理已存在的变量及相关的类。多态性使得向系
统增加新功能变得容易。
继承性和多态性降低软件复杂性的有效技术。
2.2 设计模式的原则
2.2.1 "开-闭"原则
开-闭原则(Open-closed principle 缩写 OCP),是设计模式的核心原则,
一切的一切都是围绕着“开-闭”原则展开的。
意思是,在一个系统中,对于扩展是开放的,对于修改是关闭的,一个好的系统
是在不修改源代码的情况下 ,可以扩展你的功能..而实现开闭原则的关键就是抽
象化。
在"开-闭"原则中,不允许修改的是抽象的类或者接口,允许扩展的是具体的
实现类,抽象类和接口在"开-闭"原则中扮演着极其重要的角色..即要预知可能变
化的需求.又预见所有可能已知的扩展..所以在这里"抽象化"是关键!
2.2.2 可变性的封闭原则
找到系统的可变因素,将它封装起来..这是对"开-闭"原则最好的实现..不要
把你的可变因素放在多个类中,或者散落在程序的各个角落..你应该将可变的因
素,封套起来,并且切忌不要把所用的可变因素封套在一起,最好的解决办法是,
分块封套你的可变因素,避免超大类,超长类,超长方法的出现!!给你的程序增加
艺术气息,将程序艺术化是我们的目标。
2.2.3 里氏代换原则
任何基类可以出现的地方,子类也可以出现..如果你通读过,
我想你应该明白这个原则,在书中,Bruce Eckel 大师用了大量的章节来讲解"向上
转型"和"向下转型",我想目的很清楚,不仅是要你明白类的型别,更重要的是要你
明白父类与子类的关系。
2.2.4 依赖倒转原则
要依赖抽象,而不要依赖具体的实现..如果说开闭原则是目标,依赖倒转原则
是到达"开闭"原则的手段..如果要达到最好的"开闭"原则,就要尽量的遵守依赖
倒转原则。可以说依赖倒转原则是对"抽象化"的最好规范!依赖倒转原则也是里氏
代换原则的补充。你理解了里氏代换原则 ,再来理解依赖倒转原则应该是很容易
的。
合成/聚合原则:要尽量使用合成/聚合原则,而不是继承关系达到软件复用的
目的。此原则和里氏代换原则氏相辅相成的,两者都是具体实现"开-闭"原则的规
范。违反这一原则:就无法实现"开-闭"原则。先来看看什么是合成,什么是聚合。
3
洛阳师范学院 2011 届本科生毕业设计
什么是合成?
合成:是指一个整体对依托他而存在的关系,例如:一个人对他的房子和家具,
其中他的房子和家具是不能被共享的,因为那些东西都是他自己的。并且人没了,
这个也关系就没了。这个例子就好像,乌鸡百凤丸这个产品,它是有乌鸡和上等药
材合成而来的一样。也比如网络游戏中的武器装备合成一样,多种东西合并为一种
超强的东西一样。
什么是聚合?
聚合:聚合是比合成关系的一种更强的依赖关系,聚合是一个整体对个体的部
分,例如,一个奔驰 S360 汽车,对奔驰 S360 引擎,奔驰 S360 轮胎的关系..这些关系
就是带有聚合性质的..因为奔驰 S360 引擎和奔驰 S360 轮胎他们只能被奔驰 S360
汽车所用,离开了奔驰 S360 汽车,它们就失去了存在的意义。在我们的设计中,这
样的关系不应该频繁出现..这样会增大设计的耦合度。
明白了合成和聚合关系,再来理解合成/聚合原则应该就清楚了..要避免在系
统设计中出现,一个类的继承层次超过 3 次。如果这样的话,可以考虑重构你的代
码,或者重新设计结构..当然最好的办法就是考虑使用合成/聚合原则。
2.2.5 迪米特法则
系统中的类,尽量不要与其他类互相作用,减少类之间的耦合度,因为在你的
系统中,扩展的时候,你可能需要修改这些类,而类与类之间的关系,决定了修改的
复杂度,相互作用越多,则修改难度就越大,反之,如果相互作用的越小,则修改起
来的难度就越小..例如 A 类依赖 B 类,则 B 类依赖 C 类,当你在修改 A 类的时候,你
要考虑 B 类是否会受到影响,而 B 类的影响是否又会影响到 C 类..如果此时 C 类再
依赖 D 类的话,呵呵,我想这样的修改有的受了。
2.2.6 接口隔离法则
这个法则与迪米特法则是相通的,迪米特法则是目的,而接口隔离法则是对迪
米特法则的规范..为了做到尽可能小的耦合性,我们需要使用接口来规范类,用接
口来约束类.要达到迪米特法则的要求,最好就是实现接口隔离法则,实现接口隔
离法则,你也就满足了迪米特法则。
第 3 章 印象深刻的模式
3.1 创建型模式
创建型模式涉及对象的实例化,这类模式的特点是,不让用户代码依赖于对象
的创建或排列方式,避免用户直接使用 new 运算创建对象。该模式包括工厂方法模
式、抽象工厂模式、生成器模式、原型模式、单件模式。
3.1.1 抽象工厂模式
4