定义:

  复合模式结合两个或以上的模式,组成一个解决方案,解决一再发生的一般性问题。

要点:

  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.复合模式的更多相关文章

  1. 设计模式学习--复合模式(Compound Pattern)

    设计模式学习--复合模式(Compound Pattern) 概述 ——————————————————————————————————————————————————— 2013年8月4日<H ...

  2. 设计模式之复合模式(Compound Pattern)

    一.什么是复合模式? 在形式上,复合模式确实是多个模式的组合,但满足了这一条并不一定是复合模式,注意它的定义: 将多个模式结合起来形成一个“框架”,以解决一般性问题 一提到“框架”,可能最容易联想到的 ...

  3. Java 设计模式_复合模式(2016-08-31)

    一.什么是复合模式? 在形式上,复合模式确实是多个模式的组合,但满足了这一条并不一定是复合模式,注意它的定义: 将多个模式结合起来形成一个“框架”,以解决一般性问题 一提到“框架”,可能最容易联想到的 ...

  4. HeadFirst设计模式之工厂模式

    一. 1."工厂模式"不是种真正的设计模式,而是一种编程术语 2.The Factory Method Pattern defi nes an interface for crea ...

  5. HeadFirst设计模式之策略模式

    什么是策略模式:它定义了一系列算法,可以根据不同的实现调用不同的算法 大多数的设计模式都是为了解决系统中变化部分的问题 一.OO基础 抽象.封装.多态.继承 二.OO原则 1.封装变化,如把FlyBe ...

  6. 设计模式-12组合模式(Composite Pattern)

    1.模式动机 很多时候会存在"部分-整体"的关系,例如:大学中的部门与学院.总公司中的部门与分公司.学习用品中的书与书包.在软件开发中也是这样,例如,文件系统中的文件与文件夹.窗体 ...

  7. [设计模式] 12 代理模式 proxy

    在GOF的<设计模式:可复用面向对象软件的基础>一书中对代理模式是这样说的:为其他对象提供一种代理以控制对这个对象的访问.结合上面的游戏代理的例子和下面的图,我们来进行分析一下.以前你是这 ...

  8. HeadFirst设计模式之代理模式

    一. 1.The Proxy Pattern provides a surrogate or placeholder for another object to control access to i ...

  9. HeadFirst设计模式之迭代器模式

    一. 1.迭代器模式是对遍历集合元素的抽象 2.The Iterator Pattern provides a way to access the elements of an aggregate o ...

随机推荐

  1. Postfix 电子邮件系统精要

    来源: http://sery.blog.51cto.com/10037/45500 Postfix 电子邮件系统精要 作者:田逸(sery@163.com)  from [url]http://ww ...

  2. iOS 获取当前月份的天数(转)、

    转:http://www.cnblogs.com/kingbo/p/3966855.html . 获取当前月份有多少天 NSCalendar *calendar = [NSCalendarcurren ...

  3. windows7下硬盘安装ubuntu14.04

    windows7 ubuntu1404双系统 准备软件 安装步骤 step 1 step 2 step 3 step 4 windows7 + ubuntu14.04双系统 准备软件 1)grub4d ...

  4. multiselect获取选中的多个下拉项的值(逗号分割的字符串)

    /*传入下拉select标签*/ function get_selected(mslt_employees) { var emplo =mslt_employees.multiselect(" ...

  5. c# label的内容显示不全

    c# label的内容显示不全.须要设置例如以下属性就可以: 1.将Lable的font属性的字体改成宋体: 2.将AutoSize属性改成true: 然后内容就能够显示所有了.

  6. iOS开发——OC篇&协议篇/NSCoder/NSCoding/NSCoping

    协议篇/NSCoder/NSCoding/NSCoping 协议声明类需要实现的的方法,为不同的类提供公用方法,一个类可以有多个协议,但只能有一个父类,即单继承.它类似java中的接口. 正式协议(f ...

  7. Lazy Load 图片延迟加载(转)

    jQuery Lazy Load 图片延迟加载来源 基于 jQuery 的图片延迟加载插件,在用户滚动页面到图片之后才进行加载. 对于有较多的图片的网页,使用图片延迟加载,能有效的提高页面加载速度. ...

  8. 最新 Sublime Text 3 Package Control 安装方法

    相信看到这个帖子的童鞋,一般至少对 Sublime Text 有所了解了,废话不多讲,个人在 ST2 还没用好的时候, Sublime Text 3 又横空出世了,不过现在 ST3 还是 beta 版 ...

  9. Java基础知识强化之网络编程笔记19:Android网络通信之 HttpClient和传统Post、Get方式的区别

    1. HttpClient是什么 ?     HTTP 协议可能是现在 Internet 上使用得最多.最重要的协议了,越来越多的 Java 应用程序需要直接通过 HTTP 协议来访问网络资源.虽然在 ...

  10. 设置N秒后执行某个方法或函数

    设置N秒后执行一个函数,最常用的是设置一个定时器,今天刚看到有这样一个函数,感觉还是比较简单实用的,就先记下来,免得忘记了. 5秒后执行pushSecondController这个函数 [self p ...