预览加载中,请您耐心等待几秒...
1/10
2/10
3/10
4/10
5/10
6/10
7/10
8/10
9/10
10/10

亲,该文档总共94页,到这已经超出免费预览范围,如果喜欢就直接下载吧~

如果您无法下载资料,请参考说明:

1、部分资料下载需要金币,请确保您的账户上有足够的金币

2、已购买过的文档,再次下载不重复扣费

3、资料包下载后请先用软件解压,在使用对应软件打开

软件系统建模与设计第八部分设计模式初步8.1设计模式的定义与作用面向对象设计模式分类 GRASP(GeneralResponsibilityAssignmentSoftwarePatterns,通用责任分配软件模式) GoF(GangofFour,“四人帮”设计模式)GRASP模式 责任是类间的一种合约或义务,也可以理解成一个业务功能,包括行为、数据、对象的创建等 知道责任——表示知道什么 行为责任——表示做什么 GRASP模式 责任=知道责任+行为责任 了解私有封装数据 了解关联的对象 了解能够派生或计算的事物 完成对象初始化 执行一些控制行为 责任不是类的方法,类的方法用于实现行为责任。责任更可以理解成是系统应提供的一个业务功能 责任的分配可使用顺序图或协作图来表达 面向对象设计过程就是将责任分配给对象的过程8.3.2Grasp模式举例发现具有交费行为的对象Sale 发现了该类还关联另一个类对象Payment 定义了两个部署在不同类上的方法makePayment和createGRASP模式的分类 InformationExpert(信息专家) Creator(创造者) LowCoupling(低耦合) HighCohesion(高内聚) Controller(控制器) Polymorphism(多态) PureFabrication(纯虚构) Indirection(间接) ProtectedVariations(受保护变化)8.3.3.1信息专家8.3.3.1Grasp模式-信息专家举例Creator(创造者) A是B的聚合或容器 A有初始化B所需的信息 A需要记录B的实例8.3.3.2创造者举例LowCoupling(低耦合) 减少类间的耦合(关联/聚集/依赖),使一个类的修改对其它类的影响范围有所降低,从而系统变得更容易维护 使得系统变得更容易理解8.3.3.3Grasp模式-低耦合举例HighCohesion(高内聚) 提高类的通用性,并控制类的复杂程度,努力分解类使得类具有独立的责任。 低耦合与高内聚貌似互相矛盾的两个目标。 非常低的内聚:一个类单独处理很多不同模块的事务。比如它既处理对数据库的存取,又处理用户接口图形处理。 比较低的内聚:一个类单独处理一个模块内的所有事务。 高内聚:类只处理与模块相关的功能,一个类具有一个相对独立的责任,且与其它类合作共同完成任务。8.3.3.4高内聚举例8.3.3.4高内聚举例(续1)低内聚的缺点 很难被理解和维护,可能包含近百个方法或者属性、成千上万个方法,难实现类的重用,系统脆弱不断需要修改 高内聚的优点 高内聚可表现关联责任的一个抽象,易于实现类的重用 高内聚使维护工作变得简单 高内聚使得系统模块化工作,方便团队工作8.3.3.4高内聚举例(续3)Controller(控制器) 能全面代表系统或子系统的类,比如系统事件的接收和处理通常由一个高级类来代替,称为控制器类 不要试图只定义一个控制器类,那样会违反高内聚的原则,一个子系统会有多个控制器类,分别处理不同的事务 控制器不是用户界面类,但通常与界面类关联 联系:MVC模式三层架构 8.3.3.5控制器(MVC)8.3.3.5控制器举例8.3.3.6多态8.3.3.6多态举例8.3.3.6多态举例(续)PureFabrication(纯虚构) 和多态性是同一概念,虚构顶层基类针对抽象编程。 纯虚构就是要虚构一个基类,将对象尽量组织成继承树的形式,客户端代码只引用了基类的形式,虽然高内聚类较多但并没有造成高耦合。8.3.3.7纯虚构举例8.3.3.8间接8.3.3.8间接举例8.3.3.9受保护变化GoF设计模式 Creational(创建型) Structural(结构型) Behavioral(行为型)8.4.1创建型-工厂模式8.4.1.1简单工厂模式8.4.1.1简单工厂模式(续1)8.4.1.1简单工厂模式(续2)8.4.1.1简单工厂模式(续3)8.4.1.1简单工厂模式(小结)8.4.1.1何时应用简单工厂模式8.4.1.2工厂方法模式8.4.1.2工厂方法模式(续1)8.4.1.2工厂方法模式(小结)8.4.1.2何时应用工厂方法模式8.4.1.3抽象工厂模式8.4.1.3抽象工厂模式(举例)8.4.1.3兵工厂工厂模式类图8.4.1.3动物世界工厂模式类图8.4.1.3抽象工厂模式(小结)8.4.1.3何时应用抽象工厂模式创建型-Singleton单例模式首先需要定义私有的构造函数,迫使用户不能随意使用newSingleton()来创建对象。 其次需要定义一个唯一的成员来保存单个实例的指针或引用。 classSingleton { privatestaticSingleton_instance