【HeadFirst设计模式】12.复合模式
定义:
复合模式结合两个或以上的模式,组成一个解决方案,解决一再发生的一般性问题。
要点:
MVC模式是复合模式,结合了观察者模式、策略模式和组合模式。
模型使用了观察者模式,以便观察者更新,同时保存了解耦。
控制器是视图的策略,视图可以使用不同的控制器实现,得到不同的行为。
视图使用组合模式实现用户界面,用户界面通常组合了嵌套组件,像面板、框架、按钮。
这些模式携手合作,把MVC模式三层解耦,这样可以保持设计干净又有弹性。
适配器模式用来将新的模式适配成已有的视图和控制器。
Model2是MVC在Web上的应用。
在Model2中,控制器实现成Servlet,而JSP、HTML实现视图。
传统的MVC:
View依赖Controler、Model
Controler依赖View、Model
Model谁也不依赖,而通过观察者模式通知观察者更新状态。
Model2 MVC:
Controler(Servlet)依赖Model,产生包含Model状态的Bean。
View(JSP)接收Controler转换过来的Bean,获得Model的状态,产生新视图。
其它:
在传统的MVC中,View会依赖Model,也会依赖Controler,根据观察
view的内容有两种:
(1)显示Model的状态
这种情况下,View直接依赖于Model获得数据。
(2)产生行为企图改变Model的状态
这种情况下,View直接依赖于Controler发送请求。
Controler会依赖Model和View
(1)一般情况下,Controler依赖Model,发送消息给Model,而后Model由于行为导致的状态改变由Model自己的观察者模式输出。
(2)有时候,Controler给发送消息给Model后,需要对View马上做出改变,这时会依赖View,控制View做出相应调整。
【HeadFirst设计模式】12.复合模式的更多相关文章
- 设计模式学习--复合模式(Compound Pattern)
设计模式学习--复合模式(Compound Pattern) 概述 ——————————————————————————————————————————————————— 2013年8月4日<H ...
- 设计模式之复合模式(Compound Pattern)
一.什么是复合模式? 在形式上,复合模式确实是多个模式的组合,但满足了这一条并不一定是复合模式,注意它的定义: 将多个模式结合起来形成一个“框架”,以解决一般性问题 一提到“框架”,可能最容易联想到的 ...
- Java 设计模式_复合模式(2016-08-31)
一.什么是复合模式? 在形式上,复合模式确实是多个模式的组合,但满足了这一条并不一定是复合模式,注意它的定义: 将多个模式结合起来形成一个“框架”,以解决一般性问题 一提到“框架”,可能最容易联想到的 ...
- HeadFirst设计模式之工厂模式
一. 1."工厂模式"不是种真正的设计模式,而是一种编程术语 2.The Factory Method Pattern defi nes an interface for crea ...
- HeadFirst设计模式之策略模式
什么是策略模式:它定义了一系列算法,可以根据不同的实现调用不同的算法 大多数的设计模式都是为了解决系统中变化部分的问题 一.OO基础 抽象.封装.多态.继承 二.OO原则 1.封装变化,如把FlyBe ...
- 设计模式-12组合模式(Composite Pattern)
1.模式动机 很多时候会存在"部分-整体"的关系,例如:大学中的部门与学院.总公司中的部门与分公司.学习用品中的书与书包.在软件开发中也是这样,例如,文件系统中的文件与文件夹.窗体 ...
- [设计模式] 12 代理模式 proxy
在GOF的<设计模式:可复用面向对象软件的基础>一书中对代理模式是这样说的:为其他对象提供一种代理以控制对这个对象的访问.结合上面的游戏代理的例子和下面的图,我们来进行分析一下.以前你是这 ...
- HeadFirst设计模式之代理模式
一. 1.The Proxy Pattern provides a surrogate or placeholder for another object to control access to i ...
- HeadFirst设计模式之迭代器模式
一. 1.迭代器模式是对遍历集合元素的抽象 2.The Iterator Pattern provides a way to access the elements of an aggregate o ...
随机推荐
- ExtJs5.1.1使用中问题集锦
1.获取grid filter对象: grid.getStore().getFilters().items 2.获取grid filter后把filter对象转换成json格式字符串:grid.ge ...
- 重装系统后QQ聊天记录恢复方法
重装系统后QQ聊天记录恢复方法 近日又一次安装了系统,又一次安装了腾讯的.TM,TM也是安装在之前的文件夹底下,可是聊天记录和之前的自己定义表情都不见了,看来没有自己主动恢复回来. 我这里另一个特殊的 ...
- Yum本地Rpm库设置
http://blog.csdn.net/dc_726/article/details/8497188 1 Yum对光盘的支持 查看/etc/yum.repos.d/CentOS-Media.re ...
- 在饼图上显示百分比值(报表生成器和 SSRS)
在饼图上显示百分比值(报表生成器和 SSRS) 默认情况下,图例中显示了类别来标识每个值. 如果使用了类别标签标记饼图,则可能希望在图例中显示百分比. 注意 在 SQL Server Data Too ...
- 文件和目录之link、unlink、remove和rename函数
任何一个文件可以有多个目录项指向其i节点.创建一个指向现有文件的链接的方法是使用link函数. #include <unistd.h> int link( const char *exis ...
- sql server R2 下载地址收藏
SQL Server 2008 R2 下载地址 32位: http://care.dlservice.microsoft.com/dl/download/1/e/6/1e626796-588a-495 ...
- Android_sharePreference
/** * Android的四中数据存储方式: * 1.SharePreferences * 2.SQLite * 3.Content Provider * 4.File * * SharePrefe ...
- 键盘工具栏的快速集成--HcCustomKeyboard
源项目地址:HcCustomKeyboard HcCustomKeyboard是一个键盘工具栏控件: 效果: HcCustomKeyboard使用很方便: 三部: 添加控件->操作处理-> ...
- 我的开发框架(WinForm)2
上篇文章简单的介绍了一下,我的一个开发框架.看的人还不少,多谢大家的关注,我继续介绍一下,模块和模块之间是怎么组织起来的. Data模块: 该模块主要完成对数据的操作,采用仓储模式实现,在核心模块(C ...
- java基础学习总结二(标识符、字符集、数据类型以及类型转换)
一:标识符 1:标识符可以由字母.数字.下划线_.$符等组成2:标识符的首字母只能是字母.数字.下划线3:标识符不能使用关键字或者保留字4:标识符可以是中文,但是不建议使用中文5:标识符可以任意长,没 ...