设计模式之复合模式(Compound Pattern)
一.什么是复合模式?
在形式上,复合模式确实是多个模式的组合,但满足了这一条并不一定是复合模式,注意它的定义:
将多个模式结合起来形成一个“框架”,以解决一般性问题
一提到“框架”,可能最容易联想到的就是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)的更多相关文章
- 设计模式学习--复合模式(Compound Pattern)
设计模式学习--复合模式(Compound Pattern) 概述 ——————————————————————————————————————————————————— 2013年8月4日<H ...
- 乐在其中设计模式(C#) - 组合模式(Composite Pattern)
原文:乐在其中设计模式(C#) - 组合模式(Composite Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 组合模式(Composite Pattern) 作者:weba ...
- 乐在其中设计模式(C#) - 提供者模式(Provider Pattern)
原文:乐在其中设计模式(C#) - 提供者模式(Provider Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 提供者模式(Provider Pattern) 作者:weba ...
- 乐在其中设计模式(C#) - 访问者模式(Visitor Pattern)
原文:乐在其中设计模式(C#) - 访问者模式(Visitor Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 访问者模式(Visitor Pattern) 作者:webabc ...
- 乐在其中设计模式(C#) - 策略模式(Strategy Pattern)
原文:乐在其中设计模式(C#) - 策略模式(Strategy Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 策略模式(Strategy Pattern) 作者:webabc ...
- 乐在其中设计模式(C#) - 状态模式(State Pattern)
原文:乐在其中设计模式(C#) - 状态模式(State Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 状态模式(State Pattern) 作者:webabcd 介绍 允 ...
- 乐在其中设计模式(C#) - 备忘录模式(Memento Pattern)
原文:乐在其中设计模式(C#) - 备忘录模式(Memento Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 备忘录模式(Memento Pattern) 作者:webabc ...
- 乐在其中设计模式(C#) - 迭代器模式(Iterator Pattern)
原文:乐在其中设计模式(C#) - 迭代器模式(Iterator Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 迭代器模式(Iterator Pattern) 作者:weba ...
- 乐在其中设计模式(C#) - 解释器模式(Interpreter Pattern)
原文:乐在其中设计模式(C#) - 解释器模式(Interpreter Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 解释器模式(Interpreter Pattern) 作 ...
- 乐在其中设计模式(C#) - 命令模式(Command Pattern)
原文:乐在其中设计模式(C#) - 命令模式(Command Pattern) [索引页][源码下载] 乐在其中设计模式(C#) - 命令模式(Command Pattern) 作者:webabcd ...
随机推荐
- 一个团队和他们的调查表-----("调查表与调查结果分析"心得体会)
注:这篇blog主要是描述六小灵童团队在从接到调查表任务到分析调查数据最后完成本次任务的过程,以及过程中的点滴和心德体会.---蔡何 1.制表历程 随着课程的推进,我们逐步进入了软件项目中比较重要的需 ...
- Cocos2d-x 3.x 在wp8中调用系统字体的解决方案
问题和解决方法: 在使用cocos2d-x设计游戏的时候,字体是个很重要的部分.如果游戏中对字体没有太多的要求,就可以使用平台系统自带的字体,可以节省游戏的尺寸,以及减小游戏运行时所占用的内存.当加载 ...
- 关于weblogic报UnsatisfiedLinkError Native Library xxx.so already loaded
一.场景 最近写的一个系统,在Tomcat测试完后说要改使用weblogic,于是在服务器上安装了weblogic,捣鼓了半天,一个个问题冒了出来,其中就有个比较麻烦的报错:UnsatisfiedLi ...
- swift - tableview 滚动到指定位置
滚动一定要在 tableView.reloadData()之后进行 1. 默认 plain 模式 办法1. tableView.contentOffset.y = 0 办法2 tableView. ...
- 查找ipa包,删除接的ipa包
- win10下docker安装和配置镜像仓库
初学docker记录一下流程 1.首先安装直接官网下载 DockerToolbox 即可,安装过程傻瓜式下一步即可.(这个集成了虚拟机,果然安装过的可以去掉) 2.安装好后双击Docker Quick ...
- WARNING [main] org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [] milliseconds.
编译安装tomcat-native和tomcat-deamon以后,发现toomcat启动很慢,好久才有响应.以下日志供参考: 11-Sep-2017 12:19:28.102 INFO [main] ...
- linux两个线程
http://blog.csdn.net/marksinoberg/article/details/50945212
- debian中默认不存在sudo命令解决方法
原创 2016年09月04日 21:44:14 5664 1.使用su安装sudo $su #apt-get install sudo 1 2 2.给账户设置管理员权限 #vim /etc/sudoe ...
- ApplicationContextAware学习--存疑问题
先看下ApplicationContextAware的源码: package org.springframework.context; import org.springframework.b ...