欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

软件构造 面向可维护性的设计模式

程序员文章站 2024-02-09 15:49:28
...

一、创造型的模式
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方法,用来接受外部对自己的操作:

客户端如下,这样就可以实现对一系列不同类物品的遍历和操作:
相关标签: java 设计模式

上一篇: equals和==的区别

下一篇: