一.什么是复合模式?

在形式上,复合模式确实是多个模式的组合,但满足了这一条并不一定是复合模式,注意它的定义:

将多个模式结合起来形成一个“框架”,以解决一般性问题

一提到“框架”,可能最容易联想到的就是MVC吧,不过MVC确实是一个经典的复合模式

二.MVC与复合模式

Model,View,Controller各自的职责:

这里不得不强调一下控制逻辑与应用逻辑(算法逻辑)的区别:

  • 所谓控制逻辑,就是判断在当前情景下应该调用什么对象的什么方法
  • 而应用逻辑指的是具体对象的具体方法的内部实现(某个复杂的算法,或者一系列的具体处理)

(非要细说的话,View里面其实也包含了一点控制逻辑(根据用户动作判断应该调用哪一个Controller),当然,一般情况我们都把这点逻辑忽略不计的)

MVC的最大优点就是把表现层View与模型Model分离,实现了设计上的松耦合(应对变化)以及代码的复用(View可以随便换,只需要改改新View里面那一丁点儿控制逻辑就好了)

-------

前面说过了MVC是一种复合模式,那它到底复合了哪些模式,一起看看:

  • 观察者模式:V和C都是M的观察者(Model的状态更新要及时通知V更新视图,或者通知C做相应逻辑处理)
  • 策略模式:C是V的“策略”,所以V包含的控制逻辑就是“选择策略”,也就是选择控制器Controller
  • 组合模式:V的自身实现应用了组合模式(调用顶层容器的repaint方法,容器内的所有组件都会重绘)

MVC应用了多个模式,并能够较好的解决设计上的一般性问题,所以被称为复合模式

三.传统MVC与Java本地程序的MVC

从上面可以看到传统MVC中具体的应用逻辑都被包含在M里面,也就是说,我们的模型对象不仅具有一系列属性(和getter, setter)还要有相关的数据处理方法

这与Java本地程序中的MVC不同,在Java程序中我们通过建包package来对代码结构进行分层,一般是这样做的:

需要说明的是:

  • vo包里面一般都是各个实体抽象出来的类(也有把包名定为bean的,不过意义都一样,只包含各个实体的属性及其对应的getter和setter,不含应用逻辑)
  • dao和core都是service的辅助层,三层共同映射为Controller

Java本地程序的MVC与传统MVC的最大区别就是Java中的M更纯粹(干净),只包含单纯的值对象,不含任何应用逻辑,几乎所有的逻辑都被装到了Controller里面(各种Concrete Service类)

写在后面:

应用了复合模式的成熟框架远不止MVC一个,只是其余的框架目前尚未接触到,不好妄加评论

面对一个不熟悉的框架,不妨先从设计的角度简单分析下它的内部实现,比如应用了哪些设计模式,各个层的功能及层间的交互等等

了解一些基础的设计模式有助于我们快速接受一个框架,只有清楚了框架的内部实现,才能更好的驾驭它。。

设计模式之复合模式(Compound Pattern)的更多相关文章

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

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

  2. 乐在其中设计模式(C#) - 组合模式(Composite Pattern)

    原文:乐在其中设计模式(C#) - 组合模式(Composite Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 组合模式(Composite Pattern) 作者:weba ...

  3. 乐在其中设计模式(C#) - 提供者模式(Provider Pattern)

    原文:乐在其中设计模式(C#) - 提供者模式(Provider Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 提供者模式(Provider Pattern) 作者:weba ...

  4. 乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)

    原文:乐在其中设计模式(C#) - 访问者模式(Visitor Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 访问者模式(Visitor Pattern) 作者:webabc ...

  5. 乐在其中设计模式(C#) - 策略模式(Strategy Pattern)

    原文:乐在其中设计模式(C#) - 策略模式(Strategy Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 策略模式(Strategy Pattern) 作者:webabc ...

  6. 乐在其中设计模式(C#) - 状态模式(State Pattern)

    原文:乐在其中设计模式(C#) - 状态模式(State Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 状态模式(State Pattern) 作者:webabcd 介绍 允 ...

  7. 乐在其中设计模式(C#) - 备忘录模式(Memento Pattern)

    原文:乐在其中设计模式(C#) - 备忘录模式(Memento Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 备忘录模式(Memento Pattern) 作者:webabc ...

  8. 乐在其中设计模式(C#) - 迭代器模式(Iterator Pattern)

    原文:乐在其中设计模式(C#) - 迭代器模式(Iterator Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 迭代器模式(Iterator Pattern) 作者:weba ...

  9. 乐在其中设计模式(C#) - 解释器模式(Interpreter Pattern)

    原文:乐在其中设计模式(C#) - 解释器模式(Interpreter Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 解释器模式(Interpreter Pattern) 作 ...

  10. 乐在其中设计模式(C#) - 命令模式(Command Pattern)

    原文:乐在其中设计模式(C#) - 命令模式(Command Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 命令模式(Command Pattern) 作者:webabcd ...

随机推荐

  1. VB 共享软件防破解设计技术初探(三)

    ×××××××××××××××××××××××××××××××××××××××××××××× 其他文章快速链接: VB 共享软件防破解设计技术初探(一)http://bbs.pediy.com/sho ...

  2. Python3 exec 函数

    Python3 exec 函数  Python3 内置函数 描述 exec 执行储存在字符串或文件中的 Python 语句,相比于 eval,exec可以执行更复杂的 Python 代码. 语法 以下 ...

  3. Housewife Wind(边权树链剖分)

    Housewife Wind http://poj.org/problem?id=2763 Time Limit: 4000MS   Memory Limit: 65536K Total Submis ...

  4. OOP的几个不常用的方法

    from OOP_多态 import cat c = cat("cat") print(c.__doc__) print(cat.__doc__) # # 打印类的描述信息,也就是 ...

  5. OC线程操作-GCD介绍

    1. GCD介绍 1.11.2 1.3 异步具备开启能力但是不是 一定可以开启 1.4 1.5 67. 8.

  6. Scrum 项目1.0--软件工程

    1.确定选题 视频:http://v.youku.com/v_show/id_XMTU1OTExOTY2NA==.html 2.需求分析调查 地址:http://www.sojump.com/m/81 ...

  7. 品味性能之道<七>:索引基础

    一.索引概述      索引(index),它是数据库必不可少的一部分.它其实很简单呐!很好理解.      索引好比如一本书的目录,一张地图,一个写字楼里挂在大堂墙上的公司名录,一个地铁站的出口指示 ...

  8. linux永久关闭防火墙

  9. [Selenium]验证点了某个Button之后无反应

    期望:点了某个Button,无反应 问题:怎么去验证无反应 WebElement webElement = page.getICORemove(); SeleniumUtil.hover(page.g ...

  10. JDK和Eclipse的下载路径

    JDK http://www.oracle.com/technetwork/java/javase/downloads/index.html Eclipse http://www.eclipse.or ...