版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Software Design Pattern12021/8/2第一讲 软件设计模式概述设计模式的基本概念软件危机软件设计模式的定义软件设计模式的必要性与作用软件设计的基本原则软件设计模式学习的前提基础软件设计模式的主要分类创建型模式结构型模式行为型模式工厂方法模式22021/8/2设计模式的基本概念-软件危机软件危机的含义软件危机的含义软件危机是指在计算机软件的开发和维护过程中所遇到的一系列严重问题。这些问题不仅仅是不能正常运行的软件才具有的,实际上,几乎所有软件都不同程度的存在这些问题。软件危机包含下属两方面的问题:如何开发软件,以满足对软件日益增长的需求;如何维护数量不断膨胀的已有软件。
2、32021/8/2设计模式的基本概念-软件危机软件危机的产生原因软件危机的产生原因与软件本身的特点有关与软件本身的特点有关。软件不同于硬件,它是计算机系统中的逻辑部件而不是物理部件;软件不会因使用时间过长而“老化”或“用坏”;在写出程序代码并在计算机上试运行之前,软件开发过程的进展情况较难衡量,软件质量也较难评价,因此管理和控制软件开发过程十分困难;软件质量不软件质量不是根据大量制造的相同实体的质量来度量,而是与每一个组是根据大量制造的相同实体的质量来度量,而是与每一个组成部分的不同实体的质量紧密相关成部分的不同实体的质量紧密相关,因此,在运行时所出现的软件错误几乎都是在开发时期就存在而一直未
3、被发现的,改正这类错误通常意味着改正或修改原来的设计,这就在客观上使得软件维护远比硬件维护困难;软件是一种信息产品,具有可延展性,属于柔性生产,与通用性强的硬件相比,软件更具有多样化的特点。42021/8/2设计模式的基本概念-软件危机软件危机的产生原因软件危机的产生原因来自于软件开发人员的弱点来自于软件开发人员的弱点。其一,软件产品是人的思维结果,因此软件生产水平最终在相当程度上取决于软件人员的教育、训练和经验的积累;其二,对于大型软件往往需要许多人合作开发,甚至要求软件开发人员深入应用领域的问题研究,这样就需要在用户与软件人员之间以及软件开发人员之间相互通讯,在此过程中难免发生理解的差异,
4、从而导致后续错误的设计或实现,而要消除这些误解和错误往往需要付出巨大的代价;其三,由于计算机技术和应用发展迅速,知识更新周期加快,软件开发人员经常处在变化之中,不仅需要适应硬件更新的变化,而且还要涉及日益扩大的应用领域问题研究。52021/8/2设计模式的基本概念-软件危机软件危机软件危机软件危机主要有以下一些典型表现:1.对软件开发成本和进度的估计常常很不准确。2.用户对“已完成的”软件系统不满意的现象经常发生。3.软件产品的质量往往靠不住。4.软件常常是不可维护的。5.软件通常没有适当的文档资料。6.软件成本在计算机系统总成本中所占的比例逐年上升。7.软件开发生产率提高的速度,远远跟不上计
5、算机应用迅速普及深入的趋势。62021/8/2设计模式的基本概念模式设计模式软件设计模式的必要性与作用设计模式的分类72021/8/2设计模式的基本概念设计模式的概念最早起源于Christopher Alexander.每个模式描述了一个在我们的环境中不断出现的问题以及该问题解决方案的核心。通过使用模式,我们可以无限次使用那些已有的解决方案,无需重复相同的工作。通用定义:模式是一种问题的解决思路,它已经适用于一种实践环境,并可以使用于其他环境。82021/8/2设计模式的基本概念-生活中的模式古人在遇到生活问题时,能通过不断的思考、实践、总结,最后得到许多解决生活困难的方法。后人遇到相同问题的
6、时候,也会采用同样的方法,这些方法就被称为模式。烤肉-取火取水-打井耕田-耕牛92021/8/2设计模式的基本概念-设计模式所谓设计模式是对于某一类软件设计问题的可重用的解决方案。设计模式的最终目标就是帮助人们利用成功软件设计师们的集体经验,来设计出更加优秀的软件,解决软件危机的问题。 引入软件设计模式将成为企业或者个人可持续发展引入软件设计模式将成为企业或者个人可持续发展的必然选择。只有专业,才能在这个领域做得最的必然选择。只有专业,才能在这个领域做得最好,为社会、企业和个人带来更多的价值好,为社会、企业和个人带来更多的价值102021/8/2设计模式的基本概念-设计模式的特点设计模式的特点
7、设计模式的特点名称名称每个设计模式都有一个名称。可传授性可传授性问题反复出现,解决问题的方案相同,大家都接受改方案。可重用性可重用性问题反复出现,尽管问题出现的 环境有不同,但解决方案都应该有效。 112021/8/2设计模式的基本概念-设计模式的必要性与作用重用设计重用设计重用设计比重用代码更有意义,它会自动带来代码重 用;为设计提供共同的词汇为设计提供共同的词汇 每个模式名就是一个设计词汇,其概念使得程序员间的交流更加 方便;编写开发文档更加容易;重构系统更加容易重构系统更加容易设计模式从最初的设计就考虑到变化,因此当需求发生变化时,一般不会改变整体设计;节约设计时间节约设计时间可采用任何
8、编程语言实现可采用任何编程语言实现 122021/8/2设计模式的基本概念-设计模式基本原则高内聚、低耦合高内聚、低耦合一个软件系统要有一个稳定的架构,不会随需求的改变而发生巨大的变动。因此,高内聚、低耦合是一个软件系统设计中必须遵循的基本原则。面向抽象编程面向抽象编程在面向过程的软件开发中,上层组件调用下层组件,就意味着上层组件依赖于下层组件,当下层组件发生剧烈变化时,上层组件也要跟着一起发生变动,这将导致软件组件模块的复用性大大降低,从而增加软件开发成本,使软件结构设计上存在一定的臃肿性,不利于后期系统维护工作。多用组合少用继承多用组合少用继承在面向对象的软件设计中,对于类的扩展,首先想到
9、的是使用类的继承来实现,由子类继承父类,从而完成对子类功能的扩展。继承的好处是可以尽量让相同的属性或者功能复用,但是随着项目越来越大,需求的不断变化,继承就会变得越来越臃肿,后期难以控制和维护。最重要的是,继承会不分青红皂白地把父类的公有和受保护的方法统统继承下来,而这些方法可能是子类不需要的功能,会对子类产生一些危害。“开开- -闭闭”原则原则, ,即“对扩展开放,对修改关闭” 132021/8/2设计模式的基本概念-设计模式的分类目前设计模式可以分为两大类:目前设计模式可以分为两大类:l GOF(Gang of Four) GOF 是由四位(Erich GAMMA, Richarc Hel
10、m, Ralph Johnson, John Vlissides) 具有丰富的面向对象设计经验的大师给出的,所以被称为“四人帮”模式;GOF设计模式常用的有23种;着重考虑设计的实现,类的交互和软件的质量;l GRASP(General Responsibility Assignment Software Patterns)通用责任分配挼建设计模式;着重考虑设计类的原则以及如何分配类的功能;GOF是遵循是遵循GRASP模式要求的面向对象设计模式模式要求的面向对象设计模式142021/8/2设计模式的基本概念-设计模式的分类GOF设计模式分类可基于两种准则:设计模式分类可基于两种准则:l 根据模
11、式的目的,也就是根据模式是用来完成什根据模式的目的,也就是根据模式是用来完成什么工作么工作 Creational(创建型) Structural(结构型) Behavioral(行为型)l根据模式的范围,模式是针对类还是对象根据模式的范围,模式是针对类还是对象类模式;对象模式;152021/8/2设计模式的基本概念-设计模式的分类162021/8/2设计模式学习的前提基础l至少掌握一种面向对象程序设计语言至少掌握一种面向对象程序设计语言l具有面向对象程序设计的基本概念具有面向对象程序设计的基本概念l掌握掌握UML(Unified Modelling Language)实践是需要理论知识积累的。
12、要想正确应用各种设计模式,首先需要学习设计模式,掌握设计模式的实现要点,最重要的是在学习设计模式当中掌握软件设计原则。设计模式是前人的实践经验总结出来的,具有固定的实现方式,但是设计原则是活的,是需要我们认真体会和领悟的。172021/8/2创建型模式之一(工厂方法模式)l名称:工厂方法模式(名称:工厂方法模式(Factory method pattern) 或工厂模式(或工厂模式(Factory pattern) 或或 虚构造虚构造器(器(Virtual Constructor)l设计:父类负责定义创建对象的公共接口,子类则负责生成具体的对象。l意图:将类的实例化操作延迟到子类中完成,由子类
13、来决定究竟该实例化(创建)哪一个类。182021/8/2创建型模式之一(工厂方法模式)所谓工厂方法模式(Factory Method Factory Method PatternPattern),就是定义一个创建产品对象的工厂接口,让子类决定实例化哪一种实例对象,也就是将实际创建实例对象的工作推迟到子类当中,核心工厂类不再负责具体产品的创建。192021/8/2创建型模式之一(工厂方法模式)202021/8/2创建型模式之一(工厂方法模式)212021/8/2创建型模式之一(工厂方法模式)工厂方法时序图222021/8/2创建型模式之一(工厂方法模式)实例一(兵工厂)232021/8/2创建型
14、模式之一(工厂方法模式)实例一(兵工厂)242021/8/2创建型模式之一(工厂方法模式)实例二(多文档)252021/8/2接口的作用接口的定义方面来说,接口其实就是类和类之间的一种协定,一种约束(安全性).方便统一管理.另一个是方便调用提高模块内的内聚性,降低模块间的耦合性.扩展性使用方便,可读性强,结构清晰的特点。interface IBark void Bark();class Dog implement IBark public Dog() public void Bark() System.out.println(汪汪); 262021/8/2抽象类和接口的区别abstract c
15、lass 在 Java 语言中表示的是一种继承关系,一个类只能使用一次继承关系。但是,一个类却可以实现多个interface。abstract class 中可以有自己的数据成员,也可以有非abstarct的成员方法,而在interface中,只能够有静态的不能被修改的数据成员(也就是必须是static final的,不过在 interface中一般不定义数据成员),所有的成员方法都是abstract的。abstract class和interface所反映出的设计理念不同。其实abstract class表示的是is-a关系,interface表示的是like-a关系。实现抽象类和接口的类必
16、须实现其中的所有方法。抽象类中可以有非抽象方法。接口中则不能有实现方法。接口中定义的变量默认是public static final 型,且必须给其初值,所以实现类中不能重新定义,也不能改变其值。抽象类中的变量默认是 friendly 型,其值可以在子类中重新定义,也可以重新赋值。 接口中的方法默认都是 public,abstract 类型的。272021/8/2创建型模式之一(工厂方法模式)实例二(多文档)282021/8/2创建型模式之一(工厂方法模式)实例二(多文档)292021/8/2创建型模式之一(工厂方法模式)实例二(多文档)302021/8/2创建型模式之一(工厂方法模式)实例二
17、(多文档)312021/8/2创建型模式之一(工厂方法模式)实例二(多文档)322021/8/2创建型模式之一(工厂方法模式)实例三(手机工厂)332021/8/2创建型模式之一(工厂方法模式)实例三(手机工厂)342021/8/2创建型模式之一(工厂方法模式)实例三(手机工厂)352021/8/2创建型模式之一(工厂方法模式)实例三(手机工厂)362021/8/2创建型模式之一(工厂方法模式故事中的工厂方法模式 我们看一下故事中出现的人物和事物各自对应工厂方法设计模式的哪些部件,如下所示:大司徒王允宝刀工厂(负责提供宝刀)校尉曹操获得七星宝刀的具体工厂七星宝刀具体产品(宝刀中的一类)3720
18、21/8/2创建型模式之一(工厂方法模式其实我们可以再抽象化一点:大司徒王允拥有很多宝刀,而七星宝刀是其中最好、最锋利的一把,曹操获得的就是这把最锋利的七星宝刀。OK!我们已经使用了抽象的概念了!382021/8/2创建型模式之一(工厂方法模式X建立产品建立产品1 1抽象宝刀抽象宝刀AbstractSword AbstractSword 2 2具体宝刀具体宝刀QixingSwordQixingSword七星宝刀七星宝刀X建立工厂建立工厂1 1抽象宝刀工厂抽象宝刀工厂ISwordFactory ISwordFactory 生产抽象宝刀生产抽象宝刀2 2具体宝刀工厂具体宝刀工厂Caocao Cao
19、cao 生产七星宝刀生产七星宝刀X故事情节的历史重现故事情节的历史重现X用八星宝刀来考验模式用八星宝刀来考验模式1 1创建八星宝刀创建八星宝刀BaxingSwordBaxingSword2 2创建具体宝刀工厂创建具体宝刀工厂Caocao2 Caocao2 生产八星宝刀生产八星宝刀3 3让曹操使用八星宝刀刺杀董卓让曹操使用八星宝刀刺杀董卓392021/8/2创建型模式之一(工厂方法模式)402021/8/2创建型模式之一(工厂方法模式)412021/8/2创建型模式之一(工厂方法模式)package com.demo.factory.itf;import com.demo.factory.mod
20、el.AbstractSword;/* * 宝刀工厂 * * author Administrator * */public interface ISwordFactory/* * 生产各类宝刀(返回值是抽象宝刀类型) * * return */public AbstractSword createSword();422021/8/2创建型模式之一(工厂方法模式)package com.demo.factory;import com.demo.factory.itf.ISwordFactory;import com.demo.factory.model.AbstractSword;import
21、 com.demo.factory.model.object.QixingSword;/* * 具体工厂曹操 * * author * */public class Caocao implements ISwordFactory/* *实现ISwordFactory接口的createSword方法生产七星宝岛 */public AbstractSword createSword()return new QixingSword();432021/8/2创建型模式之一(工厂方法模式)package com.demo.factory.model;/* * 定义抽象宝刀 * * author Admi
22、nistrator * */public abstract class AbstractSword/ 宝刀的名称private String name;public AbstractSword()/ 获得宝刀名称public String getName()return name;/ 设置宝刀名称public void setName(String name) = name;442021/8/2创建型模式之一(工厂方法模式)package com.demo.factory.model.object;import com.demo.factory.model.AbstractS
23、word;/* * 七星宝刀类 * * author * */public class QixingSword extends AbstractSword/* * 构造方法设置宝刀名称 */public QixingSword()this.setName(七星宝刀七星宝刀);452021/8/2创建型模式之一(工厂方法模式)package com.demo;import java.util.HashMap;import java.util.Map;import com.demo.factory.Caocao2;import com.demo.factory.itf.ISwordFactory;import com.demo.factory.model.AbstractSword;public class
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年高处作业培训模拟试题含答案详解(考试直接用)
- 2026广东茂名市职业病防治院(茂名市骨伤科医院)招聘就业见习岗位人员1人备考题库及答案详解(有一套)
- 2026广西来宾合山市融媒体中心招聘见习人员4人备考题库及答案详解(全优)
- 2026四川省盐业集团有限责任公司选聘所属子公司总经理1人备考题库含答案详解(综合卷)
- 2026宁波甬科天使创业投资基金管理有限公司招聘1人备考题库附答案详解(满分必刷)
- 2026河北保定交通发展集团有限公司招聘27人备考题库含答案详解(a卷)
- 2026安徽马鞍山首创水务有限责任公司招聘劳务人员2人备考题库及答案详解【历年真题】
- 2026绵阳科达人才安居有限责任公司员工招聘1人备考题库及答案详解(名校卷)
- 机构投资者、高管薪酬制度与公司治理:中介效应的深度剖析与实践启示
- 酒店顾客服务标准制度
- 2025年凉山州中考语文试题答案解析卷
- 夜间生产管理办法
- 《智慧物流概论》试卷及答案 共2套
- 骨灰堂管理制度
- (重庆康德二诊)2025年重庆市高三第二次联合诊断检测 语文试卷(含答案解析)
- GB/T 15561-2024数字指示轨道衡
- 全季酒店培训体系介绍
- 江苏国信电厂笔试题
- 国开(河北)2024年《法律工作者职业道德》形考任务1-4答案
- 语法填空15篇(湖南名校模拟)-2024年中考英语逆袭冲刺名校模拟真题速递(湖南专用)
- 会务服务保障方案(2篇)
评论
0/150
提交评论