由于如下笔记中有直接描述是该书的第几节,因此将该书的封面贴下:
1.将软件与设计模式比拟为城市与建筑模式,那么在面向对象的解决方案里,我们将对象和接口看成墙壁和门窗,模式的核心在于提供了相关问题的解决方案。
在软件设计中可能会遇到很多类似的问题,在每次遇到类似问题时我们不必全都新想办法来解决,而可以复用之前解决类似问题的方案,解决问题多之后就会有针对特定问题有特定(相对固定)的方式方法来解决,这相对固定的方式方法就是设计模式,其也算是经验总结。
开篇有两种在设计模式书籍里面很重要的表格和关系图,分别描述了各设计模式设计支持的可变方面以及各个设计模式之间的关系,具体如下:
3.设计模式确定了所包含的类和实例,他们的角色,协作方式以及职责分配。
4.经典的MVC模式主要用到了Observer,Composite和Strategy三种设计模式。
MVC包括三类对象,模型Model是应用对象,视图View是它在屏幕上的表示,控制器Controller定义用户界面对用户输入的响应方式
5.1.4节设计模式的编目,简短描述了23中设计模式的作用
6.设计模式依据其目的可以分为创建型(Creational),结构型(Structural),行为型(Behavioral)三种类型。
创建型:与对象的创建有关(5种) Factory Method,Abstract Factory,Builder,Prototype,Singleton
结构型:处理类或对象的组合(7种)Adapter,Birdge,Composite,Decorator,Facade,FlyWeight,Proxy
行为型:对类或对象怎样交互和怎样分配职责进行描述(11种) Interpreter,Template Method,Chain of Responsibility,Command,
Iterator,Mediator,Mementor,Observer,State,Strategy,Visitor
设计模式如果根据范围来分,则可以分为类模式和对象模式。
类模式:处理类和子类之间的关系,这些关系通过继承来建立,编译时刻就已经确定下类,属于静态的。(4种)
对象模式:处理对象间的关系,这些关系在运行时刻是可以变化的,具有动态性。(20种)
7.各设计模式之间也是有关系的,参看1.5中的关系图,各个相关模式之间加上某些需求就可以转换为另外一个模式。
8.复用方式中类继承与对象组合的区别:
类继承:白箱复用,父类的实现对子类来说完全是透明的,创建新的类很方便,子类只需要少量的扩展即可形成新的类。
编译时已经决定继承关系,静态,破坏类的封装性,父类的实现有改动直接影响子类,有可能改动并不使用子类,有牵一发而动全身的影响,
这个可以通过继承抽象类来缓解,这样父类会有较少的具体实现。
对象组合:黑箱复用,被组合的对象中只能调用组成成员对象的接口,无法知道其它具体实现,可以通过多态对组合成员对象在运行时动态修改
不破坏封装性。
优先是用对象组合,而不是类继承。理想状态下,如果你不是想要去创建行的构件,你应该能够只使用对象组合技术,通过组装已有的构件就能够获得
你需要的功能。
9.委托是一种组合方法,它使得组合具有与继承同样的复用能力,在委托方式下,有两个对象参与处理一个请求,接收请求的对象将操作委托给它的代理
者(delegate).这类似于子类将请求将给它的父类处理。State,Strategy,Visitor三种模式较多的运用到委托模式,在State模式中,一个对象将请求
委托给一个描述当前状态的State对象来处理,在Strategy模式中,一个对象将一个特定的请求委托给一个描述请求执行策略的对象,一个对象只有一个
状态,但它对不同的请求可以有许多策略。这两种模式的目的都是通过改变委托对象来改变委托对象的行为。在Visitor模式中,对象结构的每个元素上
的操作总是被委托到Visitor对象上。
委托是对象组合的特例,它告诉你对象组合作为一个代码复用机制可以替代继承。
10.参数化类型提供了除了类继承和对象组合之外的第三种方法来组合面向对象系统中的行为。这三种复用技术存在着较大的差异,对象组合允许你在
运行时刻改变被组合的行为,但是它存在间接性,比较低效。类继承允许你提供操作的缺省实现,并通过子类重定义这些操作。参数化类型允许你改变
类所用到的类型,典型的就是模板类,泛型的使用。类继承和参数化类型都不能在运行时刻被改变,即为静态设计,写代码时可以预见执行结果的。
11.1.6.7节,一般容易导致软件重新设计的原因,在软件设计初期就应该注意在这些情况下采用一些设计模式来使得软件松耦合,能够较为容易的进行修
改和扩展,总之让软件更加灵活,后期维护和扩充起来比较方便。
1) 通过显示地指定一个类来创建对象。
Abstract Factory,Factory Method, Prototype
2) 对特殊操作的依赖
Chain of Responsibility,Command
3) 对硬件和软件平台的依赖
Abstract Factory, Bridge
4) 对对象表示或实现的依赖
Abstract Factory, Bridge, Memento,Proxy
5) 算法依赖
Builder,Iterator,Strategy,Template Method,Visitor
6) 紧耦合
Abstract Factory, Command, Facade, Mediator,Observer,Chain of Responsibility
7) 通过生成子类来扩充功能
Bridge, Chain of Responsibility,Composite,Decorator,Observer,Strategy
8) 不能方便的对类进行修改
Adapter,Decorator,Visitor
12.参考1.7中表1-2设计模式所支持的设计的可变方面,通过查看这些内容确定是否有必要使用设计模式,以及使用那个设计模式。
13.skip chapter2
14.创建型模式抽象了实例化过程,它帮助一个系统独立于如何创建,组合和表示它的那些对象。一个类创建型模式是用继承来改变被实例化的类,而一个对象