1. 软件开过程中的视角
视角 | 描述 |
概念 | “软件要负责什么?” |
规约 | “怎么使用软件?” |
实现 | ”软件怎样履行自己的责任?“ |
可能使用的另外一组视角:使用视角和创建/管理视角。
共性和可变性分析、三种视角与抽象类之前的关联
2. 对象与封装:传统看法与新看法
传统是对象被视为具有方法的数据。
应该从概念视角出发--对象昌具有责任的一个实体。
这样有助于使我们关注对角的意图行为,而不是对角如何实现。
传统通常认为封装的定义是”数据隐藏“,但这样局限性太大。
封装应该被视为”任何形式的隐藏“。换句话说,可以隐藏数据,还包括实现细节、派生类、设计细节、实例化规则等。
3. 工厂方法
对于对象的创建和管理,有一条很好的通用规则可以遵守:
对象应该要么构造和/或管理其他对象,要么使用对象,而不应该兼而有之。
工厂方法不仅封装了创建对象的过程,还加强了内聚性,限制变化的影响(符合开闭原则),同时便于测试。
工厂不仅仅与对象是否存在有关,而且涉及存在多少个对象。
工厂的作用不仅是实例化
工厂不仅将使用与构造分离,还可以履行其他职责(如错误处理)。通过封装这些职责,客户代码不仅能免于这些职责,还可以与这些职责相关的修改隔离开来。
归结到一个基本原则,对于系统中的任意两个实体A和B,要么A使用B,要么A创建/管理B,但是这两种关系永远不能同时存在
4. 单体模式现实需要单体模式的情况:
1. 现实情况只存在一个对象
2. 如果存在两个以上的对象,将会引起复杂或严重的问题
3. 多个对象会造成资源浪费
4. 。。。
开发需要单体模式的情况:
1. 需要全局访问数据
关于单体模式的实现
1. 饿汉式
利用类装载程序,可以保证只会创建一个对象。如果没有性能因素需要将对象的实例化推迟到需要时进行时。
2. 懒汉式
在多线程情况下需要使用Double-Checked Locking模式,以保证不会实例化两个对象。