设计模式:前人经验总结出来的设计方案,可复用

创建型模式:告诉我们怎么更好的创建对象,第五章。

结构型模式:研究结构,怎么把类、对象更好的组合在一起。

行为类模式:研究对象、类怎么进行调度,怎么更好的分配职责、实现功能。

一、结构性模式

(1)适配器模式:
  解决类之间接口不兼容问题,即类是以一种方式实现的,但用户想用一种不同的方式调用(例如签名不同)。
  方法:通过增加一个接口,对已存在的类进行封装。
  适配器的两种方式:委托和继承
  委托:
  客户端(client)的调用和存在的类(LegacyRectangle)的接口不同,这时声明一个interface(Shape),Shape的实现类通过委托的方式,调用LegacyRectangle的方法实现适配,这个实现类就是适配器。

  客户端调用这个原本存在的类(LegacyRectangle)时要通过调用适配器:

(2)装饰器模式:
  假如说一个东西他有很多的特性(或者说功能),例如特性a、b、c、d;那如果需要这个东西的子类能够拥有部分特性,比如说子类X有特性a、b,子类Y有特性b、c、d,那应该怎么实现?
  继承肯定是不适合,如果搞一个接口它有所有的这些特性,而某个子类只需要其中的部分属性,但继承的话就要继承所有的特性,这样显然不好,会有很多空函数。
  或者给每个特性构造一个类,但由于java不支持多继承,故也无法实现任意特性的组合;
  或者将所有特性的组合构造一个类,这样显然会组合爆炸,且有大量代码重复。
  装饰器模式:为每一个特性构造一个子类,将特性通过委派机制增加到对象上,形式是递归地,就是一个一个功能地加。
  形式如下:对于一个对象component,先有一个基本地实现类ConcreteComponent,然后Decorator是逐渐地对于这个component加特效(雾),呃加特性。每一个具体地Decorator可以对其加一个特效(雾)。

例如,构建一个有三个特效的栈:

ecorator是面向对象,run time;继承是编译时。
decorator的例子:集合的unmodifiable();

(3)façade:
  提供一个统一的、简化的接口,来取代对一系列小的接口的调用,相当于对一大堆接口做了封装

二、行为模式

(1)策略模式:
   背景:

  解决方案:
  为算法构造一个总的接口,不同的算法实现一个具体的类,利用委托,运行时动态传入客户端需要的算法,例如List。
  举例:
  ShoppingCart是一个需要调用pay算法的类,pay算法有一个接口PaymentStrategy,这个接口有两个实现类,分别是用信用卡支付和用支付宝支付。


  pay的实现就是委托给这个接口:

  调用时若需要不同的支付方式,只需要向pay传不同类型的算法即可:

(2)模板模式:
  解决的问题:做某件事情的步骤一样,但每个步骤的具体做法不同。
  解决方案:共性的步骤、步骤的顺序在抽象类中实现,差异化的步骤在各个子类中实现。
  实现方式是继承和重写
  抽象类中实现了规定各步骤顺序的函数:templateMethod,其子类实现具体的各个步骤:step1、step2、step3:

  使用时对于不同子类,调用方法相同,直接调用规定各步骤顺序的templateMethod方法即可:

  显然模板模式时应用在框架中的,而且是白盒框架,子类实现这个框架中的抽象的方法,然后框架调用他们。

(3)迭代器模式:
  这是客户端通用的能够遍历一组在容器中的ADT的方式,而不需要关心这个容器的基本类型。
  模式的结构:
  由一个构造迭代器的接口(左)和迭代器接口(右)组成,各自的接口有各自的实现类:

  如果一个集合类实现了Iterable接口和迭代器,就可以进行显式或隐式的遍历,隐式就是使用for循环:

  不同的类可以实现自己的迭代器:

4-3 面向复用的设计模式相关推荐

  1. HIT 软件构造 面向复用的设计模式

    设计模式 除了类本身,设计模式更强调多个类/对象之间的关系和交互过程-比接口/类复用的粒度更大 分为创建型模式.结构型模式.行为类模式 结构型模式 adapter(适配器模式) 什么时候使用 将某个类 ...

  2. 软件构造 第五章第三节 可复用的设计模式

    第五章第三节 可复用的设计模式 Structural patterns 1.适配器模式(Adapter) 问题描述:其中LegacyRectangle是已有的类(需要传入矩形的一个顶点.长和宽),但是 ...

  3. 软件构造学习笔记(九)面向复用的软件构造技术

    目录链接 Part I What is Software Reuse? Part II How to measure "reusability"? Part III Levels ...

  4. 软件构造(九) 面向复用的软件构造技术

    1.什么是软件复用 软件重用是使用现有软件组件实现或更新软件系统的过程. 软件复用有两方面: 面向复用编程:开发出可复用的软件 基于复用编程:利用已有的可复用软件搭建应用系统 为什么复用: 降低成本和 ...

  5. 第5章:可复用性的软件构建方法 5.2面向复用的构造

    大纲 设计可复用的类 继承和重写 重载(Overloading) 参数多态和泛型编程 行为子类型与Liskov替换原则 组合与委托 设计可复用库与框架 API和库 - 框架 Java集合框架(一个例子 ...

  6. 复用:设计模式 反模式 分析模式

    1987 年,SmallTalk社区的Ward Cunningham 和Kent Beck发表了一篇文章<Using Pattern Languages for Object-Oriented ...

  7. 面向复用的软件构造技术知识点总结与思考

    一.复用 1.复用种类: 白盒复用:源代码可见,复制已有代码到正在开发的系统,进行修改和扩展 黑盒复用:源代码不可见,不能修改,只能通过API接口来使用 1)源码级别复用 2)模块级别复用:类,接口 ...

  8. 4-2 面向复用的软件构造技术

    1.设计可复用的类 1.1 行为子类型和LSP 子类型: ​相比于父类型,要有相同或更强的ADT(前置条件变弱或后置条件变强.更强的不变量): ​在java中表现为:子类型可以增加方法:子类型中重写的 ...

  9. 面向可维护性的设计模式

    一.创造性模式 1.1 工厂模式(Factory Pattern) 定义: 工厂方法模式也被称为虚拟构造器.当client不知道要创建哪个具体类的实例,或者不想在client代码中指明要具体创建的实例 ...

最新文章

  1. 步进电机正反转实验_电工基础:帮你学会电机正反转双重互锁控制
  2. 稀疏和L1正规化(Sparsity and Some Basics of L1 Regularization )
  3. lstm 变长序列_keras在构建LSTM模型时对变长序列的处理操作
  4. fasttext初步使用
  5. 软件开发计划_敏捷软件开发实践:估算与计划读书笔记123第21章 关于计划的沟通...
  6. 二级c语言作答文件不存在,全国计算机等级考试二级C语言上机考试题库及答案...
  7. Head First设计模式之备忘录模式
  8. 浪潮服务器开启远程管理,浪潮服务器远程管理
  9. 基于jQ+CSS3页面滚动内容元素动画特效
  10. html地图动画效果图,【html】绚丽的HTML5地图分布动画DEMO演示
  11. android 内存抖动_android内存泄漏怎么破?一招教你搞定!
  12. 粒子群优化算法python_粒子群优化算法(PSO)
  13. vijos1697——平面几何
  14. filenet骗局_将FileNet P8与J2EE消息传递基础结构集成
  15. 伺服电机和步进电机的区别
  16. html5游戏修改,Duang! Html5游戏调试神器全新出炉!- Cocos DevTools
  17. maximo工作流底色更改
  18. ngx_http_core_module模块提供的变量
  19. BGP-ISIS实验
  20. WiFi、蓝牙、NFC哪家强?短距离无线通信技术对比分析

热门文章

  1. h2database源码浅析:TransactionMap、MVMap、MVStore
  2. 转:C#调用C++的DLL搜集整理的所有数据类型转换方式
  3. 设计模式--适配器(Adapter)
  4. ConcurrentHashMap1.8
  5. 夯实Java基础(十八)——泛型
  6. ARM编程模式和7钟工作模式
  7. C++中,int a = 10的后面的操作
  8. hdu 1710 Binary Tree Traversals (二叉树)
  9. MUI - 图片预览(perviewimage)的优化
  10. JavaScript高级程序设计33.pdf