04 Mar 2019
备忘录模式
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。
- memento对象只负责存储状态(value objects)。
- caretaker负责管理memento堆栈,保存originator的状态以及供其恢复堆栈内存储的状态。
- 只有originator可以创建或恢复它的状态。
把数据结构和对其的操作解耦,使得操作可以自由地添加。
ObjectStructure枚举需要被访问者操作的元素,枚举时每个element accept visitor就是在传入visitor并使其在其中调用逻辑方法。
注意
- 相较于存储状态,一种变形是,存储反转操作。如:操作(+5),那就存储操作(-5)。
- 有些场景的反转操作并不能得到之前的结果,如:图计算,翻译。
...
04 Mar 2019
中介模式
用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互作用,从而使其耦合松散,而且可以独立地改变他们间的交互。
优点
Mediator的出现减少了各个Colleague的耦合,使得可以独立地改变和复用各个Colleague类和Mediator。
把对象如何协作进行了抽象,将中介作为一个独立的概念封装在对象中,关注的对象就从对象各自本身的行为转义到他们之间的交互上来,是从一个更为宏观的角度看待系统。
缺点
当系统出现‘多对多’交互复杂的对象群时,不要急于使用中介者模式,而是烦死系统在设计上是否合理。
由于ConcreteMediator控制了集中化,浴室就把交互复杂性转变为了中介者复杂性,这就使ConcreteMediator比任何一个ConcreteColleague都复杂。
...
04 Mar 2019
Model View ViewModel模式
需要依赖WPF/Silverlight来实现,即只适用于这两个框架。
大体上和MVP类似:
- Model: the data;
- View: Binding to ViewModel set by the DataContext;
- ViewModel:
- Exposes the Model as Properties or Commands
- Must implement INotifyPropertyChanged
优缺点
优点:
- 减少code-Behind;
- Model不需要为了支持View去更改;
- 前端页面设计,和后端业务逻辑分离;
- 减少开发时间;
- Multi-targeting(project linking) : support .net multi-framework
缺点:
- 创建了更多的文件;
- 简单的任务可能实现上也比较复杂;
- 缺少标准化;
- 特定地适用于WPF、Sliverlight平台;
相关模式
- Model View Presenter(MVP)
- Model View Controller(MCV)
- Presentation Model(PM)
...
04 Mar 2019
Model View Presenter 模式
view 和 presenter 相互绑定,view负责关联html内部的函数和变量。presenter 负责把view传给他的args和调用的model作为参数传入自己绑定的view 的函数中。
- view 直接和html关联交互
- presenter (aka controller)和view相互绑定,然后view在需要展示时传参调用presenter 的相关函数,这些函数再运用具体的逻辑去取需要的model传入view的函数去渲染展示
- model只负责为presenter 提供数据
- 这样就形成了很好的分离解耦 :view只负责展示,presenter只负责业务逻辑,model只负责提供数据
目的
- 职责分离
- 需要展示的数据 Model
- 业务逻辑 presenter
- 展示数据 view
- 使模式中这些合作者(MVP)能单独测试
- 比查找业务逻辑更具可读性和可维护性
...