[设计模式 3] 用设计模式的眼光看MVC框架

导读:之前一直在区分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视图的组成。

 

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

 

评论 22
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值