一.什么是复合模式?

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

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

一提到“框架”,可能最容易联想到的就是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类)

复制:

http://www.cnblogs.com/ayqy/p/4023367.html

最新文章

  1. java爬虫:在请求body中增加json数据采集
  2. c#开源消息队列中间件EQueue 教程
  3. [.net 面向对象程序设计深入](2)UML——在Visual Studio 2013/2015中设计UML用例图
  4. python抓取网页中图片并保存到本地
  5. Python从2.6升级到2.7,使用pip安装module,报错:No Module named pip.log(转载)
  6. APM飞控修改数传模块方法
  7. linux之unlink函数解析
  8. bzoj1196:[Hnoi2010]chorus 合唱队
  9. div+css3列布局,带详尽注释
  10. 转:ProGuard 常见命令备份
  11. scu - 3254 - Rain and Fgj(最小点权割)
  12. .net core nlog记录日志
  13. [JAR包] android引入JAR包,打包成JAR包,打包成Library项目,导入Library项目
  14. C语言-while循环
  15. UrlRewriter配置IIS支持伪静态
  16. js动态添加-表格逐行添加、删除、遍历取值
  17. PDF 补丁丁 0.6.0.3355 版发布(修复阅读模式、书签缩放的问题)
  18. node起步
  19. Python+Selenium学习--案例介绍
  20. com.esotericsoftware.kryo.kryoexception java.util.ConcurentModificationException

热门文章

  1. Android 快捷方式
  2. 基于UDP协议的控制台聊天
  3. [Yii][RBAC]Yii中应用RBAC完全指南
  4. MongoDB log4j 日志整合
  5. hihocoder 1077线段树
  6. phpstorm 解决svn 无法提交的问题
  7. SSH框架总结(框架分析+环境搭建+实例源代码下载)
  8. QT实现多语言切换
  9. [转] React Router 使用教程
  10. marquee 标签的使用详情