模式名称(Pattern Name):一个助记名、词汇(描述模式的问题、解决方案和效果)。便于交流和思考,找到恰当的模式名称也是设计模式编目的难点之一。
问题(Problem):描述了何时使用模式。
解决方案(Solution):描述了设计的组成成分,他们之间的相互关系及各自的职责和写作方式(抽象级别上的,针对一般设计问题)。
效果(Consequences):描述了模式应用的效果及使用模式应权衡的问题(时空、灵活性、扩充性、可移植性)。
模式的基本元素
GOF的模式描述
复用解决方案:通过复用已经建立的设计,我为自己的问题找到了更高的起点并避免了绕弯路。我们受益于学习别人的经验。我不必再为普通、重复的问题重新设计解决方案。
建立通用的术语:交流与协作都需要一个共同的词汇基础、一个对问题的共同观点。设计模式在项目的分析和设计阶段提供了一个通用的参考点。
更高的分析和设计的视角:在问题上、在设计和面向对象的过程中, 模式给你一个更高层次的视角。这样的视角将你从“ 过早处理细节” 的暴政中解放出来。
改善团队和个人学习
代码的可修改性得到改善
设计模式阐述了基本的面向对象原则
对改良策略的采用— 甚至在模式不出现的时候
针对接口编程。
优先使用对象组合, 而不是类继承。
找到并封装变化点。
了解“ 庞大的继承体系” 的替代方案
Creational patterns:Deal with initializing and configuring classes and objects
Structural patterns:Deal with decoupling interface and implementation of classes and objects
Behavioral patterns:Deal with dynamic interactions among societies of classes and objects
设计模式:在特定环境(Context) 下﹐对特定问题(Problem)的惯用解决之道(Solution)。
类的模型/视图/控制器(MVC:Model/View/Controller)三元组被用来构建应用程序。
模型(Model):是应用对象,所有的操作都在这里实现,它若需要取得视图中的对象或更新视图,需通过控制器来进行处理。
视图(View):是模型在屏幕上的表示,模型在进行操作后,其结果是通过视图显示的。
控制器(Controller):用于管理用户与视图发生的交互,定义用户界面对用户输入的响应方式。一旦用户需要对模型进行处理,不能直接执行模型,而必须通过控制器间接实现的。
不使用MVC,用户界面设计往往将这些对象混在一起,而MVC则将它们分离以提高灵活性和复用性。
MVC通过建立一个“定购/通知”协议来分离视图和模型。视图必须保证它的显示正确地反映了模型的状态。一旦模型的数据发生变化,模型将通知有关的视图,每个视图相应地得到刷新自己的机会。
表面上看,这个例子反映了将视图和模型分离的设计。然而,这个设计还可以用于解决更一般的问题:
将对象分离,使得一个对象的改变能够影响到另一些对象,而这个对象并不需要知道 那些被影响的对象的细节。这个更一般的模式被描述成Observer模式。
Views可以看作一棵树,显然可以用Composite Pattern来实现。
MVC允许你在不改变视图外观的情况下改变视图对用户输入的响应方式。
指定视图缺省控制器的Factory Method。
用来增加视图滚动的Decorator (装饰器) 。
主要关系还是由Observer、Composite(组合)和Strategy 三个设计模式给出的。