定义:

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

要点:

  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. Triangles

    1010: Triangles Time Limit: 2 Sec   Memory Limit: 128 MB Submit: 18   Solved: 8 Description You are ...

  2. C++ 外部调用private方法

    1.思考,对于C++,能不能在外部调用私有方法? 2.在Java中,子类继承不能缩小父类成员的访问权限.因为在Java中,继承只是表示Is-A关系,因此,父类提供的接口,子类必须承诺仍然提供,不能缩小 ...

  3. Mac Pro更换SSD后,在Win7下启用ACHI的方法AHCI

    在Mac Pro下更换SSD后,如果安装Win7,要将SSD改为AHCI模式是非常麻烦的.本文介绍如何将Mac的Win7下的SSD改为AHCI方式驱动,及几种常见问题的处理. 一.当Lion与Win7 ...

  4. Regular Expressions --正则表达式官方教程

    http://docs.oracle.com/javase/tutorial/essential/regex/index.html This lesson explains how to use th ...

  5. windows7怎么共享文件夹

    http://jingyan.baidu.com/article/d45ad148f06fef69552b80e6.html

  6. 使用Jsoup帮助解析具有html标签的数据和解析网页

    下载Jsoup包后导入 /** * Created by YGW on 2016/4/17. * 显示公告的详细内容 */public class PressFragment extends Frag ...

  7. 修改整个app的字体

    在项目开发中  有时候为了一些好的UI效果  可能需要自定义字体  app导入字体库的教程网上有很多 导进去 修改plist文件  然后如何将整个app的字体都换成自定义的字体呢  一个个去写太麻烦了 ...

  8. MySQL创建/删除/清空表,添加/删除字段

    创建表: create table tablename (column_name column_type); create table table_name( id int not null auto ...

  9. Greedy

    在现实世界中,有这样一类问题:它有n个输入,而它的解就由这n个输入的某个子集组成,不过这个子集必须满足某些事先给定的条件.把那些必须满足的条件称为约束条件:而把满足约束条件的子集称为该问题的可行解.问 ...

  10. Java内存溢出示例

    按照java内存的结构,发生内存溢出的地方常在于堆.栈.方法区.直接内存. 一.堆溢出 堆溢出原因莫过于对象太多导致,看代码: /** * java 堆溢出 * VM Args:-Xms20m -Xm ...