导读:之前一直在区分MVC和设计模式的区别,但是,既然有些人认为MVC是一种设计模式,那么它们之间肯定是有共通之处的。所以,本篇博客,就用设计模式的眼光来看MVC框架。仅是本人对于MVC的粗鄙看法,还请路过的高人指教。


一、总体概述

首先,不得不承认的是,设计模式和框架是完全不同的两个概念。这个请看:【设计模式 2】设计模式的来源,及其相混淆的模型、框架、架构区别

其次,框架可以有多个设计模式,而MVC可以简要的看作是对于发布—订阅者模式、策略模式、组合模式的综合运用。大家先看这几个设计模式的类图:

发布—订阅者模式:


策略模式:


组合模式:



二、细谈设计模式与MVC

2.1,发布—订阅

 订阅发布模式定义了一种一对多的依赖关系,让多个订阅者对象同时监听某一个主题对象。这个主题对象在自身状态变化时,会通知所有订阅者对象,使它们能够自动更新自己的状态。


对于MVC框架来说,每个Controller可以对应有多个View。比如说我们最近做的项目,在controller层抽象出了一个PictureManage类,很多个视图都要用到这个类进行突破的上传、下载操作。那么这些需要用到这个图片处理类的view,事实上就是发布—订阅模式中具体的订阅者子类,而这个controller就是发布—订阅者模式中的发布者类。当这个观察者类改变时,对应的订阅者的状态也就发生的改变。


2.2,策略模式

定义一系列的算法,把每一个算法封装起来, 并且使它们可相互替换。本模式使得算法可独立于使用它的客户而变化。


在MVC中,View总是通过一个特定的Controller实例去实现一个特定的响应策略,当我们更换这个Controller的时候,则可以改变View对用户输入的响应。事实上,对于这个模式的理解应该是最容易的了,比如说,呃,可能是一个不好的例子,但很能说明问题。之前在做图片上传的时候,最开始是用的框架中自带的文件上传功能去做的,但是效果不太理想(传到本地文件夹了)。后来要将图片上传到Nginx服务器,那么这时候,就重新建立了一个controller,在view中所有关于图片的处理,都统一请求了这个新的controller,这时候,这两个controller是可以互相替换的(在不同的需求下)。它的替换,不影响view对于图片请求的处理。


2.3,组合模式

将对象组合成树形结构以表示‘部分-整体’的层次结构。组合模式使得用户对单个对象和组合对象的使用具有一致性。


对于组合模式的理解,关键点只有一句话,那就是:一个View视图,可以由多个View视图组合而成。当然这里可能就涉及到了部分视图的运用。


三、总结

联系具有普遍性,万事万物都能找到联系,找到联系就能织成一张网。之前我就总是在找区别,所以我始终要记着两个东西,现在我找到了联系,那么我只需要有一个节点就够了。对于MVC和设计模式的联系,我认为关键点还是在于View视图和Controller之间的调用关系,以及View视图的组成。


也许,去找到事物之间的联系,才是第一要务。区别,是在有联系了之后的。如果以这种方式去学习,我想应该会轻松很多!我要去践行。。。。。。


posted on 2016-04-21 22:07  何红霞  阅读(508)  评论(0编辑  收藏  举报