已阅读5页,还剩94页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
设计模式 DesignPattern 张凯副教授计算机学院软件工程系 主要内容 设计模式定义 设计模式的定义设计模式 DesignPattern 是一套被反复使用 多数人知晓的 经过分类编目的 代码设计经验的总结 使用设计模式是为了可重用代码 让代码更容易被他人理解 保证代码可靠性 设计模式定义 设计模式的基本要素设计模式一般有如下几个基本要素 模式名称 问题 目的 解决方案 效果 实例代码和相关设计模式 其中的关键元素包括以下四个方面 模式名称 Patternname 问题 Problem 解决方案 Solution 效果 Consequences 通过一两个词来为模式命名 以便我们更好地理解模式 并方便开发人员之间的交流 通常模式都是根据其功能或结构命名 描述了应该在何时使用模式 它包含了设计中存在的问题以及问题存在的原因 描述了一个设计模式的组成部分 以及这些组成部分之间的相互关系 各自的职责和协作方式 通常解决方案通过UML类图和核心代码进行描述 描述了模式的优缺点以及在使用模式时应权衡的问题 面向对象的七大设计原则 1 开放封闭原则OCP2 单一职责SRP3 里氏代换LSP4 依赖倒转DIP5 迪米特法则LOD6 接口隔离ISP7 合成聚合复用原则CARP 面向对象的七大设计原则 开放封闭原则OCP开放封闭原则 Open ClosedPrinciple OCP 是面向对象的可复用设计 ObjectOrientedDesign或OOD 的基石 其他设计原则 里氏代换原则 依赖倒转原则 合成 聚合复用原则 迪米特法则 接口隔离原则 是实现开放封闭原则的手段和工具 面向对象的七大设计原则 开放封闭原则OCP定义 一个软件实体应当对扩展开放 对修改关闭 即在设计一个模块的时候 应当使这个模块可以在不被修改的前提下被扩展 面向对象的七大设计原则 开放封闭原则OCP满足开放封闭原则的系统的优点a 通过扩展已有的软件系统 可以提供新的行为 以满足对软件的新需求 使变化中的软件系统有一定的适应性和灵活性 b 已有的软件模块 特别是最重要的抽象层模块不能再修改 这就使变化中的软件系统有一定的稳定性和延续性 c 这样的系统同时满足了可复用性与可维护性 面向对象的七大设计原则 开放封闭原则OCP如何实现开放封闭原则解决问题关键在于抽象化 抽象化是面向对象设计的第一个核心本质 在面向对象编程中 通过抽象类及接口 规定了具体类的特征作为抽象层 相对稳定 不需更改 从而满足 对修改关闭 而从抽象类导出的具体类可以改变系统的行为 从而满足 对扩展开放 面向对象的七大设计原则 单一职责原则SRP单一职责原则 SingleResponsibilityPrinciple SRP 一个类 最好只做一件事 只有一个引起它变化的原因 一个优良的系统设计 强调模块间保持低耦合 高内聚的关系 单一职责 强调的是职责的分离 面向对象的七大设计原则 单一职责原则SRP为什么要把这两个职责分离到单独的类中呢 如果一个类承担的职责过多 等于把这些职责耦合在了一起 一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力 这种耦合会导致脆弱的设计 当变化发生时 设计会遭受到意想不到的破坏 面向对象的七大设计原则 里氏代换原则LSP里氏代换原则 LiskovSubstitutionPrinciple LSP 在一个软件系统中 子类应该可以替换任何基类能够出现的地方 并且经过替换以后 代码还能正常工作 面向对象的七大设计原则 里氏代换原则LSP一个软件实体如果使用的是一个基类的话 那么一定适用于其子类 而且它觉察不出基类对象和子类对象的区别 也就是说 在软件里面 把基类都替换成它的子类 程序的行为没有变化 反过来的代换不成立 如果一个软件实体使用的是一个子类的话 那么它不一定适用于基类 任何基类可以出现的地方 子类一定可以出现 面向对象的七大设计原则 依赖倒转原则DIP依赖倒转原则 dependenceinversionprinciple DIP 1高层模块不应该依赖于低层模块 二者都应该依赖于抽象 2抽象不应该依赖于细节 细节应该依赖于抽象 要针对接口编程 不要针对实现编程 也就是说应当使用接口和抽象类进行变量类型声明 参数类型声明 方法返回类型说明 以及数据类型的转换等 而不要用具体类 面向对象的七大设计原则 依赖倒转原则DIP 面向对象的七大设计原则 依赖倒转原则DIP 面向对象的七大设计原则 依赖倒转原则DIP工厂方法模式模版方法模式迭代器模式 面向对象的七大设计原则 迪米特法则LoD迪米特法则 LawofDemeter LoD 又叫做最少知识原则 就是说 一个对象应当对其他对象有尽可能少的了解 面向对象的七大设计原则 迪米特法则LoD 1 只与你直接的朋友们通信 2 不要跟 陌生人 说话 3 每一个软件单位对其他的单位都只有最少的知识 而且局限于那些本单位密切相关的软件单位 就是说 如果两个类不必彼此直接通信 那么这两个类就不应当发生直接的相互作用 如果其中的一个类需要调用另一个类的某一个方法的话 可以通过第三者转发这个调用 面向对象的七大设计原则 迪米特法则LoD这样 当一个模块修改时 就会尽量少的影响其他的模块 扩展会相对容易 门面 外观 模式和中介者模式实际上就是迪米特法则的具体应用 面向对象的七大设计原则 合成聚合复用原则CARP合成聚合复用原则 Composite AggregateReusePrinciple CARP 在一个新的对象里面使用一些已有的对象 使之成为新对象的一部分 新的对象通过向这些对象的委派达到复用这些对象的目的 应首先使用合成 聚合 合成 聚合则使系统灵活 其次才考虑继承 达到复用的目的 面向对象的七大设计原则 合成聚合复用原则CARP优先使用对象合成 聚合 UML中的两个菱形关系 而不是类继承 尽量使用合成 聚合 不使用类继承 继承属于强耦合的结构 合成聚合复用好处 优先使用对象的合成 聚合将有助于你保持每个类被封装 并被集中在单个任务上 这样类和类继承层次会保持较小规模 并且不太可能增长为不可控制的庞然大物 面向对象的七大设计原则 合成聚合复用原则CARP将抽象部分与它的实现部分分离 使他们都可以独立地变化 桥接模式就是把抽象和实现独立出来 让它们各自变化 这就使得每种实现的变化不会影响其他实现 从而达到应对变化的目的 面向对象的七大设计原则 接口隔离原则ISP接口隔离原则 interfaceseparateprinciple ISP 接口隔离原则 使用多个专门的接口比使用单一的总接口要好 也就是说 一个类对另外一个类的依赖性应当是建立在最小的接口上 面向对象的七大设计原则 接口隔离原则ISP 接口 往往有两种不同的含义 一种是指一个类型所具有的方法特征的集合 仅仅是一种逻辑上的抽象 另外一种是指某种语言具体的 接口 定义 有严格的定义和结构 比如c 语言里面的Interface结构 对于这两种不同的含义 ISP的表达方式以及含义都有所不同 面向对象的七大设计原则 接口隔离原则ISP当我们把 接口 理解成一个类所提供的所有方法的特征集合的时候 这就是一种逻辑上的概念 接口的划分就直接带来类型的划分 这里 我们可以把接口理解成角色 一个接口就只是代表一个角色 每个角色都有它特定的一个接口 这里的这个原则可以叫做 角色隔离原则 面向对象的七大设计原则 接口隔离原则ISP 面向对象的七大设计原则 接口隔离原则ISP如果把 接口 理解成狭义的特定语言的接口 那么ISP表达的意思是说 对不同的客户端 同一个角色提供宽窄不同的接口 也就是定制服务 个性化服务 就是仅仅提供客户端需要的行为 客户端不需要的行为则隐藏起来 面向对象的七大设计原则 接口隔离原则ISP应当为客户端提供尽可能小的单独的接口 而不要提供大的总接口 这也是对软件实体之间通信的限制 但它限制的只是通信的宽度 就是说通信要尽可能的窄 面向对象的七大设计原则 接口隔离原则ISP 面向对象的七大设计原则 接口隔离原则ISP 设计模式分类 设计模式的分类根据其目的 模式是用来做什么的 可分为创建型 Creational 结构型 Structural 和行为型 Behavioral 三种 创建型模式主要用于创建对象 结构型模式主要用于处理类或对象的组合 行为型模式主要用于描述对类或对象怎样交互和怎样分配职责 设计模式分类 创建型模式抽象工厂模式 AbstractFactory 建造者模式 Builder 工厂方法模式 FactoryMethod 原型模式 Prototype 单例模式 Singleton 设计模式分类 结构型模式适配器模式 Adapter 桥接模式 Bridge 组合模式 Composite 装饰模式 Decorator 外观模式 Facade 享元模式 Flyweight 代理模式 Proxy Attack 要我干啥嘛 设计模式分类 行为型模式职责链模式 ChainofResponsibility 命令模式 Command 迭代器模式 Iterator 中介者模式 Mediator 备忘录模式 Memento 观察者模式 Observer 状态模式 State 策略模式 Strategy 模板方法模式 TemplateMethod 访问者模式 Visitor 解释器模式 Interpreter 类图 UML六大关系关联关系 Association 聚合关系 Aggregation 组合关系 Composition 依赖关系 Dependency 实现 Realization 泛化 Generalization 类图 关联关系 Association 关联关系是类与类之间最常用的一种关系 它是一种结构化关系 用于表示一类对象与另一类对象之间有联系 在UML类图中 用实线连接有关联的对象所对应的类 在使用C C 和Java等编程语言实现关联关系时 通常将一个类的对象作为另一个类的属性 关联关系 Association 类图 Person类与Bicycle类之间存在关联关系 这意味着在Person类中需要定义一个Bicycle类型的成员变量 类图 publicclassPerson privateBicyclebicycle 骑自行车去上班 publicvoidgoToWork bicycle run 类图 聚合关系 Aggregation 聚合关系表示一个整体与部分的关系 通常在定义一个整体类后 再去分析这个整体类的组成结构 从而找出一些成员类 该整体类和成员类之间就形成了聚合关系 在聚合关系中 成员类是整体类的一部分 即成员对象是整体对象的一部分 但是成员对象可以脱离整体对象独立存在 在UML中 聚合关系用带空心菱形的直线表示 类图 聚合关系 Aggregation 类图 publicclassProjectGroup privateStudent student 开始做项目publicvoidWork student startWorking 类图 组合关系 Composition 组合关系也表示类之间整体和部分的关系 但是组合关系中部分和整体具有统一的生存期 一旦整体对象不存在 部分对象也将不存在 部分对象与整体对象之间具有同生共死的关系 在组合关系中 成员类是整体类的一部分 而且整体类可以控制成员类的生命周期 即成员类的存在依赖于整体类 在UML中 组合关系用带实心菱形的直线表示 类图 组合关系 Composition 类图 publicclassPerson privateBrainbrain publicPerson brain newBrain 类图 依赖关系 Dependency 依赖关系是一种使用关系 特定事物的改变有可能会影响到使用该事物的其他事物 在需要表示一个事物使用另一个事物时使用依赖关系 大多数情况下 依赖关系体现在某个类的方法使用另一个类的对象作为参数 在UML中 依赖关系用带箭头的虚线表示 由依赖的一方指向被依赖的一方 类图 依赖关系 Dependency 类图 publicclassBicycle publicvoidRun 给轮胎充气 publicvoidexpand Pumppump pump blow 类图 泛化关系 Generalization 泛化关系也就是继承关系 也称为 is a 关系 泛化关系用于描述父类与子类之间的关系 父类又称作基类或超类 子类又称作派生类 在UML中 泛化关系用带空心三角形的直线来表示 在代码实现时 使用面向对象的继承机制来实现泛化关系 如在Java语言中使用extends关键字 在C C 中使用冒号 来实现 泛化关系 Generalization 类图 类图 publicclassPerson protectedstringname protectedintage publicvoidmove publicvoidsay publicclassStudent Person privatestringstudentNo publicvoidstudy 类图 实现关系 Realization 接口之间也可以有与类之间关系类似的继承关系和依赖关系 但是接口和类之间还存在一种实现关系 在这种关系中 类实现了接口 类中的操作实现了接口中所声明的操作 在UML中 类与接口之间的实现关系用带空心三角形的虚线来表示 实现关系 Realization 类图 类图 publicinterfaceVehicle publicvoidmove publicclassShip Vehicle publicvoidmove Console WriteLine 轮船航行 publicclassCar Vehicle publicvoidmove Console WriteLine 汽车行驶 单例模式 Singleton 模式结构 构造函数私有 自行创建单个实例 自行向整个系统提供唯一实例 保证一个类仅有一个实例 并提供一个访问它的全局访问点 简单工厂模式 SimpleFactory 模式结构 简单工厂模式 SimpleFactory 模式结构 简单工厂模式 SimpleFactory 用户要求 添加一个新运算 工厂方法模式 FactoryMethod 定义一个用于创建对象的接口 让子类决定实例化哪一个类 该模式使一个类的实例化延迟到其子类 抽象工厂模式 AbstractFactory 提供一个创建一系列相关或相互依赖对象的接口 而无需指定它们具体的类 原型模式 Prototype 模式结构 用原型实例指定创建对象的种类 并且通过拷贝这些原型创建新的对象 原型模式 Prototype 建造者模式 BuilderPattern 模式结构 将一个复杂对象的构建与它的表示分离 使得同样的构建过程可以创建不同的表示 适配器模式 Adapter 模式结构 将一个类的接口转换成客户希望的另外一个接口 本模式使得原本由于接口不兼容而不能一起工作的那些类可以一起工作 适配器模式 Adapter 类适配器和对象适配器 假设我们在软件开发中要记录日志 包括数据库记录日志DatabaseLog和文本文件记录日志WriteLog 适配器模式 Adapter 类适配器和对象适配器 开发过程需要引入一个新的日志接口 但新的日志接口和以前的不一样 适配器模式 Adapter 类适配器 适配器模式 Adapter 类适配器 publicclassDatabaseLogAdapter DatabaseLog Ilog publicvoidWrite this WirteLog publicclassFileLogAdapter FileLog Ilog publicvoidWrite this WirteLog 适配器模式 Adapter 对象适配器 适配器模式 Adapter 对象适配器 publicclassLogAdapter Ilog privateLoglog publicLogAdapter Loglog this log log publicvoidWrite log WriteLog 适配器模式 Adapter 上面两种适配方式 可以看出在类适配方式中 是通过类的继承来实现的 同时也具有接口ILog的所有行为 这些就违背了面向对象设计原则中的类的单一职责原则 而对象适配器则是通过对象组合的方式来实现的 则符合面向对象的精神 所以推荐用对象适配的模式 桥接模式 Bridge 模式结构 桥接模式 Bridge 模式结构 将抽象部分与它的实现部分分离 使它们都可以独立地变化 组合模式 CompositePattern 模式结构 将对象组合成树形结构以表示 部分 整体 的层次结构 装饰模式 DecoratorPattern 模式结构 动态地给一个对象添加一些额外的职责 享元模式 Flyweight 模式结构 享元模式 Flyweight 模式结构 运用共享技术有效地支持大量细粒度的对象 外观模式 Facade 一个合理的设计就是为这些子系统创建一个统一的接口 这个接口将简化客户程序的判断操作 引入Facade模式后的类结构图 为子系统中的一组接口提供一个一致的界面 本模式定义了一个高层接口 这个接口使得这一子系统更加容易使用 代理模式 Proxy 模式结构 为其他对象提供一种代理以控制对这个对象的访问 状态模式 Sta
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 房地产营销策划 -美的 -义乌 -宝龙世家年度传播方案
- 夫妻离婚股份分割的流程-生活日常
- 西宁-PEP-24年小学英语第五单元测验卷
- 湖南衡阳2025届高三一轮复习好题训练:10月第1周 地理试题(解析版)
- 2025届高三英语二轮复习专项 2024年全国新课标I卷易错题二次开发练习 (含答案)
- 2024年冻土共振柱试验机项目资金筹措计划书代可行性研究报告
- 强化安全管理制度建设-坚持以人为本
- 概念验证服务标准
- Python程序设计实践- 习题及答案 ch05 实验1 数据的输入和输出
- 2025年高考生物总复习试题分类训练:免疫调节(原卷)
- 2025年九省联考新高考 政治试卷(含答案解析)
- 2024年统编版小学六年级《道德与法治》上册第四单元 法律保护我们健康成长 9.《知法守法 依法维权》 第一课时 课件
- 信息技术与学科教学融合课教学设计表
- 期中测试卷-2024-2025学年语文六年级上册统编版
- 【对民法中正当防卫的思考(论文)6800字】
- 网络安全试题题库及参考答案
- 喷涂设备租用合同模板
- 终极战略规划指南:深度剖析Cross SWOT分析、市场洞察与内部能力优化的综合行动方案
- 中国偏头痛诊治指南(第一版)2023解读
- 2024江苏省铁路集团限公司春季招聘24人高频500题难、易错点模拟试题附带答案详解
- 混凝土结构施工图平面整体表示方法制图规则和详图
评论
0/150
提交评论