资源预览内容
第1页 / 共52页
第2页 / 共52页
第3页 / 共52页
第4页 / 共52页
第5页 / 共52页
第6页 / 共52页
第7页 / 共52页
第8页 / 共52页
第9页 / 共52页
第10页 / 共52页
亲,该文档总共52页,到这儿已超出免费预览范围,如果喜欢就下载吧!
资源描述
现代软件工程第五部分软件体系结构与系统概要设计体系结构的基本问题-1软件系统的框架与体系结构-2面向对象的设计模式-3MVC结构与用户界面设计-4基于构件的软件体系结构-5从需求分析到系统设计过程-6软件系统设计规范管理-7 第五部分 软件体系结构与系统概要设计第五部分 软件体系结构与系统概要设计第三章 面向对象的设计模式设计模式的概念-3.1 创建型模式-3.2 结构型模式-3.3 行为型模式-3.4 设计模式的现实作用 -3.5n设计模式(Design Patterns)l模式:一种趋于固定的结构方式 例如:悲剧-哈姆雷特、言情-台湾琼遥、武 打动作片-成龙、惊险片-美国大片等l软件设计模式:是软件设计中总结出来的、广泛应用和 成熟的结构和结构关系l成功的模式,能针对特定问题,采用成熟和成功的方法 ,比重新设计要好的多l建筑师C.Alexander给出的经典定义是:每个模式都描述 了一个在我们的环境中不断出现的问题,然后描述了该问题 的解决方案的核心。通过这种方式,你可以无数次地使用那 些已有的解决方案,无需在重复相同的工作。l与艺术不同,工程领域,对经多年的磨练、完善和提高 而获得的成功模式,愿意加以反复使用,模式为重用提供了 基础3.1 设计模式的概念受理处理注册 处理接受受理请求/显示处理结果流程管理(流程表)流程1流程2流程3流程4流程1.1流程1.2流程1.3流程1.4回顾我们的例子:模式的应用n程序模块接口接口l好处:灵活l缺点:控制 复杂工单接口模块交换机接口模块中间件在体系结构设计过程中,设计模式一般应用在模块与模块间的结构设计上设计模式面向对象的设计模式n流程表也是一种设计模式:表驱动模式n什么叫“表驱动”?l直接调用与间接调用l间接调用的好处:一种灵活性 控制与执行的隔离 变化体现在“表”上 可以更进一步在表上做文章:数据结构l系统的控制最后取决与“表”的内容和表的表现形式l所以,系统被表所驱动n这是最简单的控制方式面向对象的设计模式n设计模式是系统架构的基础,为普通面向对象设计 ,提供了解决方案n模式以一组交互类的形式出现,用户根据需要定制 这些交互类以形成专门的设计n设计模式可以使人们可以更加方便地重用成功的设 计方案,提高软件的灵活性和可复用性,也提高了 设计文档管理的有效性和可维护性n设计模式是一种实践的总结,是OO最直接的表现。n设计模式常用的有23种n面向对象设计的模式(最主要的23个,及一些补充)l构造型模式:类和对象创建过程中的不同模式 抽象工厂、构造器、工厂、原型、单件 整体-部分、计数指针、视图句柄l结构型模式:不同类和对象之间的不同静态结 构 适配器、桥接、组合、装饰、外观、享 元、代理 主从、模型-视图-控制、表 示-抽象-控制l行为型模式:类和对象的不同职责与行为关系 责任链、命令、解释器、迭代器、中介 者、备忘录、观察者、状态、策略、模板方法 、访问者 生存周期、发送- 接收者、客户-分遣-服务器、出版-订购者、反 射面向对象的设计模式如何描述一个模式n模式的四个基本要素l模式名:pattern name 用一个词来简单表示模式的问题、解决方案和效果 。恰当和贴切的模式名,可以使我们对模式的作用“一目了 然”l问题:Problem 描述应该在何时使用模式,它针对哪些特定的设计 问题、问题的前因和后果,以及使用模式的先决条件。l解决方案:Solution 是模式本体,模式是如何构成的、它们之间的相互 关系和责任。模式是一个问题类的解决方案的抽象模板, 因此,它不描述具体的设计或实现,只提供设计问题的抽 象思路。l效果:Consequences 描述模式的应用效果和使用模式应权衡的问题。这 是在设计阶段进行设计选择时,不可避免要考虑的问题。 好处和代价:时间和空间、复用和灵活性、可扩展 和可移植性等等的平衡 3.2 对象创建型模式:creational patternsn对象实现:l根据系统的抽象分析,我们设计了类以及类的内部属性 、数据、可完成的操作和接口l然后,我们可以通过实例化类来创建对象,此对象是类 的实例,所谓实例化,就是为对象具体分配数据存储空间, 并将操作与这些数据联系起来l同一个类可以根据需要被实例化为不同的对象(多态性 )l新的类可以通过已存在的类的继承来定义,子类继承了 父类时,子类也包含了父类的数据和操作,子类的实例对象 包含了子类和父类定义的数据,能完成子类和父类定义的操 作l子类还可以通过重定义的方式,扩展父类的定义l继承是类的复用的主要方法,因为父类的特性对子类是 透明可视的,因此称为“白箱”复用l另一种复用方法是对象组合,称为“黑箱”复用。对象创建型模式:creational patternsn对象实例化过程概念与实现的补充:对象创建型模式:creational patternsn创建型模式:l创建型模式抽象了实例化的过程,这样,使得系 统与具体对象的创建、组合和表示独立开来l有二种创建模式:类创建和对象创建 类创建模式使用继承改变被实例化的类 对象创建模式将实例化委托给另一个对象l创建型模式把系统使用了哪些具体的类的信息封装了起来l模式隐藏了这些类的实例是如何被创建和放在一起的l整个系统关于这些对象所知道的仅是由抽象类所定义的接口l因此,模式使得类和对象什么被创建、谁创建、怎么被创建 、何时创建等是隐蔽和无关的。这样,使你可以用结构和功能 差别很大的“产品”对象,来配置新的系统对象创建型模式:creational patternsn基本的创建型模式:l抽象工厂:Abstract Factoryl生成器:Builderl工厂方法:Factory Methodl原型:Prototypel单件:Singletonn我们用设计模式一书的“创建迷宫”的一个通用 的例子,来介绍这5个模式。对象创建模式 1 :抽象工厂(Abstract Factory)n意图:提供一个创建一系列相关或相互依赖对象的接口, 而无需指定它们具体的类n动机:l考虑一个支持多种窗口风格的文字处理工具,滚动 条、窗口、按扭等具有不同的外观。如果这个软件可 以支持多平台,我希望在新平台上保持一致的风格( 形式和风格的可移植),但我并不关心在新的平台上 是如何具体实现这些风格的应用程序调用者文字处理工具平台(现在讨论的对象)系统平台1系统平台2系统平台3我要在不同的平台上保持相同的 窗口形式和风格、但我又不想为 每个平台编写一个版本。对象创建模式 1 :抽象工厂(Abstract Factory)n思路:l为了解决这个问题,我们定义一个抽象类,这个类声明了一 个用来创建每一种基本窗口组件(滚动条、按扭等)的接口,而 具体子类则实现特定的风格(各种风格的滚动条)。客户用这个 接口获得自己想要的风格的窗口组件时,并不考虑、也不知道是 哪个具体类为它们完成了这个工作,只需提出自己的要求(参数 )l工厂模式:客户类和工厂类分开。消费者任何时候需要某种产品, 只需向工厂请求即可。消费者无须修改就可以接纳新产品。当产品的本 质发生修改时,才需要修改接口,否则只在工厂类做相应修改。 应用程序调用者(用户)抽象的窗口组件类(例如:按扭类)接口按扭子类1按扭子类2按扭子类3系统平台1系统平台2系统平台3针对不同平台的具体实现在这里 !用户不同关心哪个子类、是如 何具体实现用户针对不同平台的接口是统 一的,也只有一个接口客户类工厂类用户针对不同平台的接口是统 一的,也只有一个接口参数参数是麦当劳还是肯特基的炸鸡翅,在 细节上会略有不同,但不止本质一 一样的n适用性(多种需要与多种选择)l一个系统要独立于它的产品的创建、组合和表示时 例如:一栋大楼,设计和建造者关心的是大楼的建筑风 格和适用性能,以及是否有满足要求的预制件。而这些预制件是 什么时候生产的、由谁生产的,我们并不关心。l一个系统要由多个产品系列中的一个来装配时 我们有很多可选的预制件,在建造不同的大楼时,根据 风格和功能的需要,我们从多种预制件库中选择一种预制件。我 们关心的是预制件是否符合我们的要求,而不是它的制造过程。l采用一系列的产品线设计方法,而产生具体产品时,采用 由它们中的某些制品组合而成时l根据制品(类库)设计,我们关心的只是制品的接口,而 不是具体的实现多种需要与多种选择所站的观察点不同(选择与被选 择),但结果都是一样的:只看接口(标准、要求),不管 过程对象创建模式 1 :抽象工厂(Abstract Factory)抽象工厂应用的案例协议栈的产品线模式系系 统统 架架 构构基于基于HTMLHTML的应用的应用基于基于WMLWML的应用的应用其他新应用其他新应用无线应用环境( WAE)HTTP 协议新 协 议无线传输层安全协议 (WTLS)无线会话层 (WSL)无线数据报协议( WDP)无线处理层( WTP)n效果l优点: (1)分离和封装了负责具体创建产品对象 责任和过程的类,客户看不见这些过程,也不会出 现在客户的代码中,客户只使用抽象接口操作。 (2)易于交换产品系列 (3)易于保持产品的一致性l缺点: Abstract Factory确定了产品的集合,要增加 新的product,就要修改Abstract Factory类和它的所 有子类。对象创建模式 1 :抽象工厂(Abstract Factory)对象创建模式2:生成器(Builder)n意图l将一个复杂对象的构建与它的表示分离,使得同样的构建 过程可以创建不同的表示n动机l例如:一个文字处理工具应能支持多种文档格式的文件处 理,可处理文档的格式在不断增加,但文字处理器系统应保 持稳定l在复杂对象的构造过程中,允许同样的构造过程能够加入 新的被构造元素,使得“构造过程结构化”n适用性l当创建复杂对象的算法应该独立于该对象的组成部分以及 它们的装配方式时l当构造过程必须允许被构造的对象有不同表示时对象创建模式2:生成器(Builder)n一个复杂对象(不同格式的文本)的构建(转换)与它的表示( 阅读)分离,使得同样的构建过程可以创建不同的表示(更多格 式的文本)一个文本阅读器的呈现部分文本格式的转换部分转换格式1转换格式2转换格式3格式1文本格式2文本格式3文本独立于阅读器的转换器称为生 成器,阅读器称为导向器阅读器转换格式N格式N文本转换器n生成器与抽象工厂的区别l功能是相似的,抽象工厂也能创建复杂对象l但生成器模式侧重一步步地构造一个复杂对象,并在最后返回结果,而抽象工厂着重简单、多产品对象,并一次返回结果n效果l使你可以改变一个产品的内部表示l将构造代码和表示代码分开l使你对构造过程进行更精致的控制n相关模式lAbstract Factory与Builder相似l区别: (1) builder重在构造过程,可一步步构造复杂对 象。而Abstract Factory重在多个系列的产品对象 (2) builder在最后一步返回产品,而Abstract Factory是立即返回对象创建模式2:生成器(Builder)对象创建模式 3:工厂方法(Factory Method) n意图:l定义一个用于创建对象的接口,让子类决定实 例化哪个类。 Factory Method 使一个类的实例化延 迟到其子类。n动机:l考察一个应用的例子:在一个图形文档应用中 ,类Application负责对图形文档的管理(创建、存 储等)l类Document负责具体图形文档的编辑,类 Document的实例化建立了一个特定文档类型的应用l但是,在实例化Document之前,Application并不 知道Document最后编辑生成的是什么类型的图形文 件n适用性l当一个类不知道它所必须创建的对象的类的时 候 这一般发生在组
网站客服QQ:2055934822
金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号