第一章 引言--《设计模式-可复用面向对象软件的基础》Erich Gamma
第一章 引言
本章主要是让我们大致明白设计模式是干嘛用的,模式分类,设计模式如何解决设计问题以及几种常见的面向对象设计中软件的复用方法。
1.什么是设计模式?
个人理解概括,设计模式是对一类问题的抽象,并描述了该类问题的解决方案。是对用来在特定场景下解决一般设计问题的类和相互通信的对象的描述。
模式四要素:(1)模式名称 。设计模式使得我们能在高的抽象层次上进行设计;(2)问题 。何时使用该模式;(3)解决方案 。对应与设计问题的解决方法,设计的组成成分,之间的相互关系以及各自的职责和协作方式。(4)效果。模式应用的效果以及使用该模式时候应该权衡的问题。
举例:MVC设计模式
MVC,模型/视图/控制器(model/view/controller),被用来构建用户界面。 model是应用对象,view是模型在屏幕上的显示,controller是定义用户界面对用户输入的响应方式。
2.模式分类
(1)创建型模式(creational):
与对象的创建有关。创建型类模式将对象的部分创建工作延迟到子类;创建性对象模式将对象的部分创建延迟到另一个对象。
(2)结构型模式(structual):
处理类或者对象的组合。结构性类模式使用继承组合类;结构性对象模式使用组合对象。
(3)行为型模式(behavioral):
描述类或者对象如何交互,如何分配职责。行为型类模式使用继承描述算法和控制流;行为型对象模式描述一组对象如何协作来完成单个对象不能完成的工作。
3.设计模式如何解决问题
(1)寻找适合的对象
(2)决定对象的粒度
(3)指定对象的接口
(4)描述对象的实现
(5)运用复用机制
A.继承
优势:白箱复用。父类的实现细节对子类可见,子类可重定义或者覆盖父类的操作。
缺点:破坏了父类的封装性;父类实现的变化会对子类有很大影响,子类严重依赖于父类。
一个解决方法是,只继承抽象类。
B.组合
优势:黑箱复用。系的功能通过对象的组装或者组合实现,类的实现不可见;对象只通过接口访问,不破坏封装性。
组合对象通过获得对其他对象的引用而在运行时刻动态地定义。保证每个类被封装,并集中在单任务上。系统的行为将依赖对象间的关系,而不是集中在一个类中。
面向对象设计原则:优先使用对象组合,而不是类继承。
委托是一种组合的特例。它使得组合具有与继承同样的复用功能。委托方式下,有两个对象参与处理一个请求,接受请求的对象将操作委托给代理者。
C.模板(参数化类型)
定义一个类型时候,不用指定所用到的其他类型。
聚合VS关联或者引用:
当类之间有整体-部分关系的时候,我们就可以使用聚合。
关联或者引用是比聚合更弱的一种耦合关系。C3->C4:表示相识关系,指C3知道C4,C3可以调用C4的公共属性和方法。没有生命期的依赖。一般是表示为一种引用。
耦合强弱关系: 依赖(对象作为操作的参数)<关联(成员是指针)<聚合(成员是对象)<组合(成员是对象)
4.设计模式应该支持变化
设计模式在应用程序、工具箱、框架中所起的作用。
(1)应用程序
(2)工具箱
(3)框架
UML中类之间的关系图,可以参考这篇文章:点击打开链接 http://www.cnblogs.com/riky/archive/2007/04/07/704298.html