《设计模式解析(第2版)》

2019独角兽企业重金招聘Python工程师标准>>> hot3.png

1. 软件开过程中的视角

视角 描述
概念 “软件要负责什么?”
规约 “怎么使用软件?”
实现 ”软件怎样履行自己的责任?“

可能使用的另外一组视角:使用视角和创建/管理视角。

《设计模式解析(第2版)》_第1张图片

共性和可变性分析、三种视角与抽象类之前的关联


2. 对象与封装:传统看法与新看法

传统是对象被视为具有方法的数据。

应该从概念视角出发--对象昌具有责任的一个实体。

这样有助于使我们关注对角的意图行为,而不是对角如何实现。


传统通常认为封装的定义是”数据隐藏“,但这样局限性太大。

封装应该被视为”任何形式的隐藏“。换句话说,可以隐藏数据,还包括实现细节、派生类、设计细节、实例化规则等。

3. 工厂方法

对于对象的创建和管理,有一条很好的通用规则可以遵守:

对象应该要么构造和/或管理其他对象,要么使用对象,而不应该兼而有之。


工厂方法不仅封装了创建对象的过程,还加强了内聚性,限制变化的影响(符合开闭原则),同时便于测试。

工厂不仅仅与对象是否存在有关,而且涉及存在多少个对象。

工厂的作用不仅是实例化

工厂不仅将使用与构造分离,还可以履行其他职责(如错误处理)。通过封装这些职责,客户代码不仅能免于这些职责,还可以与这些职责相关的修改隔离开来。


归结到一个基本原则,对于系统中的任意两个实体A和B,要么A使用B,要么A创建/管理B,但是这两种关系永远不能同时存在

4. 单体模式

现实需要单体模式的情况:

1. 现实情况只存在一个对象

2. 如果存在两个以上的对象,将会引起复杂或严重的问题

3. 多个对象会造成资源浪费

4. 。。。

开发需要单体模式的情况:

1. 需要全局访问数据


关于单体模式的实现

1. 饿汉式

利用类装载程序,可以保证只会创建一个对象。如果没有性能因素需要将对象的实例化推迟到需要时进行时。

2. 懒汉式

在多线程情况下需要使用Double-Checked Locking模式,以保证不会实例化两个对象。

转载于:https://my.oschina.net/dogstar/blog/100619

你可能感兴趣的:(《设计模式解析(第2版)》)