以前在图书馆借过设计模式相关的书,读的都不大理想。偶然看到这本《Java软件体系结构设计模式标准指南》,尝试读了前面几章,发现通俗易懂,适合我这种水平的。
以下是我看书过程中的摘录(就是copy啦)。
注:以下内容摘自《Java软件体系结构设计模式标准指南》
本书给出了包括23个GOF模式之内的42个设计模式:
7个基本模式
5个创建模式
4个集合模式
11个结构模式
11个行为模式
4个并发模式
以下具体介绍以下每类模式的大概情况:
1)基本模式
讲述的是在面向对象设计和编程中找得到最通用、最基本和最重要的一些设计模式。
模式名称 |
说明 |
接口 |
可用于设计一组提供相同服务的服务提供者类,一是客户对象可以无缝地使用不 同类型的服务提供者对象,而不需要修改其实现
|
抽象父类 |
用于设计一个框架,对一组相关类的共有功能提供一致性的实现
|
私有方法 |
提供一种设计类的行为的方法,不允许外部对象访问只针对内部用途的行为
|
访问者方法 |
提供一种使用特定方法函数访问一个对象状态的方法。这种方法阻止不同的 客户对象对对象属性的直接访问,因此将带来一个更具可维护性的类结构
|
常数管理器 |
用于为一个应用设计一个易于维护的,对常数进行集中式管理的常数仓库
|
不变对象 |
用于保证一个对象的状态不会被改变。在有多个客户对象同时访问一个数据 对象的场合,该模式可以保证这些访问不会到时竞态条件
|
监视器 |
一种用于设计应用对象的方法,以便在多线程环境中,当有多个线程同时尝 试访问该对象的时候,应用对象不会产生不可预知的结果
|
2)创建模式
顾名思义,创建对象的模式。
模式名称 |
说明 |
工厂方法 |
如果客户机对象不知道要实例哪个类,它可以利用工厂方法,为类层次结构或 相关类组中的相应类创建实例。工厂方法可能是作为客户机本身的一部分设计 的,也可能是在个别类中设计的。其中,包含工厂方法或任意其子类的类决定 了要选择的类以及如何例示该类
|
单例 |
提供了一种受约束的对象创建机制,确保指定类只有一个实例
|
抽象工厂 |
允许为一组相关类中的类创建实例,而不必让客户机对象指定要实例的实际具体类
|
原型 |
提供了一种简单的对象创建方式,即从现有的(原型)对象中复制对象
|
生成器 |
允许创建复杂的对象,可以只提供对象的类型和内容信息,并且使有关对象创建的 详细信息对客户机保持透明。这种方式允许相同的构造过程生产不同的对象表示
|
3)集合模式
“处理由一些对象组成的组或者集合,处理如何组织类和对象来形成更大结构的细节,关注设计一个
无冗余数据类的最有效方法,允许在一组对象构成的集合上定义操作。”
模式名称 |
说明 |
合成 |
允许单个对象和合成对象被以一种统一的方式访问
|
迭代子 |
允许客户端以某种顺序访问一个聚合的对象(对象的集合),而不需要知道该类内 部的内容是如何表示的
|
享元 |
将一个类中的固定不变的一般信息以及可变部分的信息分割成两个类,以节省内存 的使用,并节省建立一个对象实现的时间
|
访问者 |
允许在一些不同的对象之间定义某个操作,而不需要改变这些对象所属的类
|
4)结构模式
结构模式主要用于:处理把责任委托给其他对象的对象;在不同情况下方便对象间的通信;提供了组织
一个聚合对象的方式,从而使其能完整地被创建,并且结构模式还提供了几十回收系统资源的方式
模式名称 |
说明 |
装饰器 |
不是通过继承方式而是以对客户端透明的方式扩展一个对象的功能
|
适配器 |
允许把一个类的接口转换成客户端希望的另一个接口。这样可以让具有不同接 口的多个类一起工作
|
责任链 |
避免一个请求的发送对象和接收对象的互相耦合。允许一个发送对象把它的请 求传递给一串对象(对象链),而且不必知道哪个对象最终将处理这个请求。
|
外观 |
为一个由类组成的子系统提供了一个高层接口,使得这个子系统更易使用
|
代理 |
允许一个独立的对象被用作一个替代者以提供对一个对象的受控访问,而通常 方式下这个对象是不可访问的。
|
桥接 |
允许一个抽象接口和它的实现相分离。这样减少了两者的依赖关系,允许两者 可以被独立修改
|
虚代理 |
以对对象的客户端对象保持透明的方式,延迟一个对象的创建,直到这个对象 被真正需要创建。虚代理模式能简化这种机制。
|
审计代理 |
当有需要执行一些附加的操作时,比如在一个休想的方法被调用前后记录日志 与记账,这个模式建议把附加功能封装在一个独立的对象中。
|
聚合强制器 |
这个模式建议当一个聚合对象被实例化时,代表组成对象的成员变量也必须被 实例化。换句话说,只要一个局和对象被实例化时,它必须被完全实例化。
|
显式对象释放 |
这个模式建议当一个对象位于作用域以外时,由它绑定的系统资源也必须及时 地被释放
|
对象缓存器 |
这个模式把针对一个对象的方法调用存放在一个库中。当多个客户端对象调用 同一个方法时,结果被从库中取出返回给客户端对象,而并不去访问实际对象 ,这么做主要是为了获得一个更快的相应时间。
|
感觉这部分相当难理解。
5)行为模式
主要用于:处理不同对象之间指定责任的细节;描述对象间的通讯机制;定义一种机制,以便于在运行是
根据不同的对象选择不同的逻辑。
模式名称 |
说明 |
命令 |
将请求封装成对象,通过对象来实现对请求的控制,包括排队、顺序执行和取消
|
调停者 |
将一组对象内对象之间直接通讯的详细信息封装在一个独立的对象(调停者)中 ,从而减少这些对象各自直接交互的需要。
|
备忘录 |
将对象的状态捕获并且存储。根据需要,这个对象能够恢复到先前的状态。
|
观察者 |
提供一种“发布-订阅”的通讯模型,当对象间有一对多的依赖关系是,只要一 个对象改变了它的状态,所有依赖于它的对象都获得通知,于是它们也能够更新 自己的状态。
|
解释器 |
为了使一个客户程序或者用户有能力用一种简单的语言定义一些操作,这个模式 是非常有用的。给定一个语言,用它的语法通过指定的解释操作来提供帮助。 简单语法的语言更适用。
|
状态 |
将对象的状态相关行为封装在一组状态对象中。通过将状态相关的行为-映射到指 定的状态对象中,这个对象可以通过配置一个正确的状态对象来改变它的行为
|
策略 |
将一组相关算法各自封装在不同子类(策略对象)中。如果一个对象要使用一种 算法,他需要配置一个对应的策略对象。通过这种安排,算法的实现可以在不影 响客户端的情况下改变
|
空对象 |
提供一种方法来封装指定的对象类型的一种行为(通常是什么都不做),当某一 对象类型没有任何对象可用时,这个对象可以提供一个默认的行为。
|
模板方法 |
当一种算法能够用不同方式实现时,模板模式能够将一个算法的大纲放在一个类 (模板类)的独立方法(模板方法)中,而把算法的具体实现放到子类中。
|
对象认证器 |
当访问一个应用对象是受限的并且需要客户对象提供正确的授权时,这个模式是 有用的。可以使用一个独立的对象,它的职责是校验不同客户对象的访问级别而 不是将这个职责留给应用对象
|
通用属性注册表 |
提供一种方法用于设计一个资源库来存储一个应用状态
|
这部分好理解。
6)并发模式
并发模式用于:按照一定的次序锁定代码或者对象,以防止出现资源争夺和死锁;为提高总体响应速度
以流水线的方式访问应用资源;保证在先决条件满足时才开始执行方法
模式名称 |
说明 |
临界区 |
一种更严格意义上的Monitor,用来在类层次上锁定代码,以免不同的线程(即使是同一 类的两个实例)同时进入某段代码。
|
协同锁序 |
定义对不同对象的加锁顺序,并在设计和开发的过程中坚持这一顺序,以减少发生死锁的 可能性
|
安全挂起 |
挂起正在执行的任务,知道满足某种预设的条件再放行
|
读写锁 |
在这种模式下,不同的线程可以同时读取某一应用资源,但是不可以同时更新它,以便提 高整个应用的反应速度
|
呼,一口气敲下那么多,对书内容有个大概的了解了,具体的模式,以后补上。