现在的位置: 首页 > 综合 > 正文

《设计模式解析第二版》读书笔记:一

2019年03月19日 ⁄ 综合 ⁄ 共 1026字 ⁄ 字号 评论关闭
对象是一个有责任的实体,应该对自己负责,而且清楚地定义责任,而不是一些数据和方法的简单堆积。要学会用对象的职责而不是其结构来考虑问题。这也是领域驱动开发的核心。

对象之间的三种关系:泛化、依赖、关联(聚合、组合)
泛化表现子类和父类之间是is a的关系。
依赖表现use a的关系,通常表现为一个对象是另一个对象的某个方法的参数或者局部变量。
关联表现has a的关系,一个对象是零一个对象的成员变量,或为指针,或为引用
聚合表现为一种弱关联。对象之间是一种聚集关系,各自的生命周期互相独立。
组合表现为一种强关联,一个对象的生命周期由另外一个对象控制,而且是另外一个对象的一部分,将二者分开则没有意义。

在真正的面向对象语言中,万事万物皆为对象,包括内置的数据类型。例如x+y,等同于x.add(y)。
转移责任是面向对象设计的基本原则之一。

一: 将对象按职责建模,而不是按语义或者实体建模
二: 封装变化点为一个对象
三: 优先考虑对象包含和依赖,其次考虑继承
四: 如果需要的话,面向接口编程,而非面向实现编程

Facade模式和Adapter模式区别:Facade模式简化接口,而Adapter模式则是转化接口。

面向对象涵盖三种视角:概念视角、规约视角、实现视角
对象必须完成哪些职责(概念视角),我们能够如何调用它们(规约视角),实现这些对象的时候,要让方法提供足够的信息,保证实现正确并解耦(实现视角)。

领域驱动设计,从业务领域和对象职责来指导建模。设计模式通常被解读成预先设计,它提倡从问题领域的主要概念入手,逐步细化。极限编程的核心是循序渐进的开发,测试驱动开发。这三者之间相辅相成,个人认为应该按照以下顺序进行:领域驱动开发->设计模式->测试驱动开发

策略模式:让使用算法的类包含(聚合)一个抽象的算法类,这个抽象类有一个抽象接口指定如何调用算法,每个派生类按需要实现算法。

太多的设计人员喜欢对一开始提出的方案从一而终,这是不可取的。软件开发中,唯一不变的就是变化。经常回头看看,原先的设计中的不合理的地方,而不是抱着已有的不好的设计不放。当然,一开始就过度设计也是不提倡的。

传统的面向对象设计方法中,一般是设计人员研究问题领域,找出其中的名词,然后创建对象来标示这些名词,然后寻找与这些名词相关的动词,作为对象的方法。这种以名词和动词为中心的设计方法通常会生成超出我们意愿的庞大的类层次。在创建对象时,使用共性和可变性分析作为主导思想,会优于仅仅关注名词和动词要优美的多。

抱歉!评论已关闭.