《设计模式解析(第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

2003 Jolt大奖 读者选择奖得主 【内容简介】 本书以作者多年来为软件开发人员(包括面向对象技术老兵和新手)讲授模式的经验为基础撰写而成,首先概述了模式的基础知识,以及面向对象分析和设计在当代软件开发中的重要性。随后,使用易懂的示例代码阐明了许多当今最有用的模式,包括它们的基础概念、优点、权衡取舍、实现技术以及需要避免的缺陷,使读者能够理解模式后面的基本原则和动机,理解为什么它们会这样运作。 本书适用于软件开发专业人士,以及计算机专业、软件工程专业的高校师生,也可作为面向对象分析与设计课程的教材。 本书是最简洁、清晰、实用的设计模式著作,应用最新的Java示例,为程序员和架构师提供了使用模式进行设计、开发和交付软件的方法。 本书以作者多年来为软件开发人员讲授模式的经验为基础撰写而成。其经验已经证明,如果能够理解模式后面的基本原则和动机,理解为什么它们会这样运作,那么将有助于你加速学习模式的进程。 阅读本书,读者能够完整地理解12个核心的设计模式和1个分析模式,了解设计模式并不是孤立存在的,多个设计模式协同工作才能创建出更加坚固的应用程序。这里所讲授的12个模式并没有涵盖所有应该学会的模式,但是理解了这12个模式,你将能够举一反三,更加容易地自学其他模式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值