一、创造型的模式

1、工厂方法模式

  定义一个用于创建对象的工厂接口,其子类型来决定创建对象时实例化哪一个类。模式如下,Product是一个对象,其有子类ProductOne、ProductTwo等,定义一个工厂接口Creator,其有工厂方法factoryMethod,这样就可以利用工厂方法去创建对象。不同的工厂方法实例化接口Product不同的子类,但返回的都是接口类型,即Product:

  一个例子:

  静态工厂就不用new了:

2、抽象工厂模式

  提供接口以创建一组相关/相互依赖的对象,但不需要指明其具体实现类。
  具体形式如下,有多个产品类(下图的AbstractProductA、B等),其子类有固定的组合(例如ProductA1和ProductB1是固定组合),然后每一个抽象工厂类封装相应的一些产品子类在一起(例如ConcreteFactory1封装了ProductA1和ProductB1的组合)。当客户端需要使用一套产品时,可以通过相应的抽象工厂类去创建:

  举个例子,下图是factory代码,其中AbstractWidgetFactory是抽象工厂接口,WidgetFactory1、2是抽象工厂子类,每个类中有不同产品的各自的工厂方法:

  客户端代码如下,builder是一个辅助类,可以向他传入抽象工厂来构造一组对象:

二、结构模式

代理模式:

  某个类不方便被client直接访问,故client通过一个proxy去访问这个类。有三种情况:远程代理(cache)、虚代理(延迟创建对象)、保护代理。

  总体形式如下,由于访问RealSubject代价太高等原因,创建一个代理Proxy,通过委托机制去访问它:

  举个例子,对于一个图片对象来说,每次创建一个对象都需要从磁盘读取,代价高昂,并且读取了不一定会使用:

  使用一个proxy类,当需要使用的时候,才从磁盘读取:

三、行为模式

1、观察者模式

  一种类似于“偶像-粉丝”的框架,可以维护一对多的关系。粉丝可以到偶像那注册,偶像维护一个粉丝的列表,偶像状态发生了变化(有动态)会通知所有粉丝。

  形式如下图所示,一个Subject接口(抽象类),他维护他的观察者的列表,并且可以改变状态(setstate)、通知观察者(notify),一个Observer接口,它可以设置自己观察的对象、更新状态(由观察的对象notify的时候回调):

  举个例子,下图是一个Subject,维护列表、通知观察者、设置状态等功能如下图:

  下图是一个观察者子类,可以设置Subject、更新状态(由Subject回调):

2、访问者模式

  将一个ADT与对ADT的操作(visit)分离开来,这样可以自由更改对ADT的各种操作而不用影响ADT。

  形式如下图,有一个Visitor接口,含有针对某ADT的所有子类的visit操作,其可以有多种子类代表对ADT的不同操作;ADT中有accept方法,用来接受别人对自己的操作,也可以通过accept选取不同种类的操作:

  举个例子,下图是visitor相关类/接口,每个类中有分别对某一ADT的子类Book、Fruit的操作:

  ADT如下,每个子类有accept方法,用来接受外部对自己的操作:

  客户端如下,这样就可以实现对一系列不同类物品的遍历和操作:

5-2 面向可维护性的设计模式相关推荐

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

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

  2. Java面向可复用性和可维护性的设计模式

    今天是软构期末复习的最后一天,虽然我的真题还没有写完,但我还想再写一篇博客.第11章是所有章节中我觉得最难的一章,通过梳理,我发现每一种设计模式都有固定的规律可循,于是我打算做一个整理,浅谈一下我对各 ...

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

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

  4. 4-3 面向复用的设计模式

    设计模式:前人经验总结出来的设计方案,可复用 创建型模式:告诉我们怎么更好的创建对象,第五章. 结构型模式:研究结构,怎么把类.对象更好的组合在一起. 行为类模式:研究对象.类怎么进行调度,怎么更好的 ...

  5. 5-3 面向可维护性的构造技术

    一.基于状态的编程 1.状态模式 对象有一个状态属性,并且可以变化. 形式如下,context是某一个对象,它有属性state(状态),状态在一定的条件下会跳转至另一状态:用一个State接口来表示状 ...

  6. (2019春)软件构造:雨课堂试卷(第6章)

    目录 6-1 可维护性 单选题 第1题 1分 多选题 第2题 2分 多选题 第3题 2分 单选题 第4题 2分 单选题 第5题 1分 单选题 第6题 1分 6-2 面向可维护性的设计模式 单选题 第1 ...

  7. (2019春)软件构造:雨课堂试卷(四)(第6章)

    文章目录 6-1 可维护性 单选题 第1题 1分 多选题 第2题 2分 多选题 第3题 2分 多选题 第4题 2分 单选题 第5题 1分 单选题 第6题 1分 6-2 面向可维护性的设计模式 单选题 ...

  8. Android—设计模式原则及常见的设计模式

    设计模式六大原则: 单一职责原则:实现类要职责单一,类之间不相互影响. 里氏替换原则:不要破坏继承体系,共享的父类方法应该保持不变,不能被子类重新定义.我们应该将父类定义为抽象类,并定义抽象方法. 依 ...

  9. 大话设计模式之设计模式遵循的七大原则

    最近几年来,人们踊跃的提倡和使用设计模式,其根本原因就是为了实现代码的复用性,增加代码的可维护性.设计模式的实现遵循了一些原则,从而达到代码的复用性及增加可维护性的目的,设计模式对理解面向对象的三大特 ...

最新文章

  1. Dell服务器的 Idrac调试口的配置方式
  2. Confluence 6 手动安装语言包和找到更多语言包
  3. python 一次性定时器_python 定时器每天就执行一次的实现代码
  4. openpyxl写入一行数据_老板让我从几百个Excel中查找数据,我用Python一分钟搞定!...
  5. CSS基础(part10)--盒子模型之边框
  6. Gradle中的默认任务和任务依赖关系设置
  7. 关于经纬度的两个计算[Teaksxgluxv]
  8. esplise自定义快捷代码补全_【Eclipse】_Eclipse自动补全增强方法 常用快捷键
  9. Java实现MySQL数据库导入
  10. python3.5怎么打开一个文件,Python3.5入门学习记录-File
  11. 高校科研管理系统源代码_高校科研信息管理系统
  12. 如何获得SQL Server 2012 MCSA认证
  13. 计算机更新后无法远程,重装系统后无法进行远程桌面连接怎么办
  14. android hdmi 开发,Android TV HDMI开发
  15. win10计算机入门使用教程,win10技巧大全_win10使用技巧方法教程 - 系统家园
  16. 解决谷歌浏览器主页被篡改问题
  17. 遛狗牵绳AI识别实时监测助力智慧城市
  18. 什么是三层交换机-三层交换机的工作原理和作用
  19. jQuery实现轮播图(fadeIn,siblings,fadeOut方法实现)
  20. 用友U8数据备份实例工作经验

热门文章

  1. 可视化数据展示工具ChatSQL
  2. ORA-17129=SQL 字符串不是DML 语句
  3. 后台性能测试不可不知的二三事
  4. oracle中特殊字符处理
  5. UGUI之Toggle使用
  6. 合并table中某一列相邻的相同的行
  7. free store VS heap(自由存储区VS堆)
  8. AjaxControltoolkit学习笔记—PopupControl 使用详解
  9. SpringBoot 核心知识点整理!
  10. 【恋上数据结构】MySQL的索引底层为何使用 B+树?