首先是各种模式的区分,大概自己筛选了一些关键词
策略:封装变化的,算法族,减少if-else
工厂:生产需要的特定类型
装饰者:添加行为
适配器与外观:实现原有接口,方法体却是另一个对象的实现。外观:宏命令,一键设置
代理:本地和远程
单例:只实例化一次
命令:宏命令,指定
模板:算法(定义不一样的方法)
迭代器与组合:管理,树,节点有子树,不一样的对象然后组合到同一棵树,组合类别,迭代器:遍历,将不一样的集合改为迭代器
观察者:追踪,通知
然后进入主题:复合模式
定义
复合模式结合两个或以上的模式,组成一个解决方案,解决一再发生的一般性问题。MVC和Model2属于典型的复合模式,视图和控制器是策略模式,视图本身是组合模式,模型是观察者模式。
复合模式入门例子:鸭子
①有的会叫有的不会:策略模式,封装变化的,算法族
②鹅装成鸭:适配器模式,实现原来的接口,方法体却是另一个对象的实现。一般适配器与外观模式共用,通过外观模式的宏命令,一键设置来操纵适配器的对象
③计算鸭叫的次数:装饰者模式,添加行为
④生产不同类别的鸭子:工厂模式,一个工厂生产一种类别
⑤管理一群鸭子,鸭子有不同的种类:迭代器与组合模式,管理,树,节点又有子树,同样的对象不一样的类别组合到一起,组合类别。组合里的具体调用,通过迭代器
⑥观察某个或者某群鸭子:观察者模式,追踪,通知
针对性学习复合模式:MVC模式
①MVC:model-view-controller模型-视图-控制器
View视图:用来呈现模型,视图通常直接从模型中取得它需要显示的状态与数据
Controller控制器:取得用户的输入并解读其对模型的请求
Model模型:模型持有所有的数据、状态和程序逻辑。模型没有注意到视图和控制器,虽然它提供了操纵和检索状态的接口,并发送状态改变给观察者
执行流程:
- 用户和视图交互:视图是模型的窗口,用户操作视图,视图就会告诉控制器用户做了什么,控制器就负责处理
- 控制器要求模型改变状态:控制器解读用户的动作,并告诉模型怎么做
- 控制器也可能要求视图做出改变:当控制器从视图接收到某一动作,结果可能是它也需要告诉视图改变其结果,如控制器可以将界面上某些按钮变无效
- 当模型改变状态时,模型会通知视图
- 视图向模型询问状态:视图直接从模型取得它显示的状态,当控制器请求视图改变时,视图也可能向模型询问某些状态
一些应用:可以在保留原有视图和控制器的情况下,通过适配器模式适配模型Model
②MVP与MVC:MVP的出现就是为进一步分离业务逻辑和界面处理。在MVP中,M与V完全切断联系,由P进行总控。
当V接收到了操作,将相应的请求传递到P,由P进行业务处理以及与M进行交互,同时P又在恰当的时机对view进行更新(接口 / 回调方法 / 事件)
这样V只需要暴露出接口,V与P通过接口通讯,一方面能够将业务逻辑转移至P,一方面通过接口使得P可以适配多个V。
总的来说:MVP的Model和View之间不进行通讯,都是通过Presenter完成
③视图和控制器实现了策略模式,视图是一个对象,可以被调整使用不同的策略,而控制器提供了策略。视图只关心系统中可视的部分,对于任何界面行为,都委托给控制器处理。使用策略模式也可以让视图和模型之间的关系解耦,因为控制器负责和模型交互来传递用户的请求。对于工作是怎么完成的,视图毫不知情
模型实现了观察者模式,当状态改变时,相关对象(视图、控制器)将持续更新。使用观察者模式,可以让模型完全独立于视图和控制器,即模型对视图和控制器没有依赖。同一个模型可以使用不同的视图,甚至可以同时使用多个视图。
视图实现了组合模式,视图是GUI组件(标签、窗口、文本组件)的组合,顶层的组件包含其他组件,直到叶节点
针对性学习复合模式:Model2
- Model2:将Web适配MVC,使它符合浏览器/服务器模型,并使用Servlet和Jsp技术的结合,达到MVC的分离效果
- 执行流程:HTML界面对Servlet(控制器)发出请求,Sevlet解析用户输入,并对模型(数据库)做出请求(返回JavaBean)。Servlet把控制权交给JSP(视图),(解析JavaBean)产生HTML视图并返回浏览器显示
①用户发出一个会被Servlet收到的HTTP请求,该请求一般包含表单数据、请求头等,然后Servlet解析这些数据
②Servlet扮演控制器:Servlet处理请求,通常会将该请求向模型(一般是数据库)发出,处理结果一般以JavaBean的形式打包
③控制器将控制权交给视图Jsp:视图就是Jsp,Jsp唯一的工作就是产生页面,表现模型的视图(④模型从JavaBean中获得)以及进一步动作所需要的所有控件
⑤视图通过HTTP将页面返回浏览器:页面返回浏览器,作为视图显示出来。用户提出进一步的请求,以同样的方式处理
要点
- MVC是复合模式,结合了观察者模式、策略模式、组合模式
- 模型使用观察者模式,以便观察者更新,同时保持两者之间解耦
- 控制器是视图的策略,视图可以使用不同的控制器实现,得到不同的行为
- 视图使用组合模式实现用户界面,用户界面通常组合了嵌套的组件,如面板、框架和按钮
- 上述模式携手合作,把MVC模型的三层解耦,保持设计干净又有弹性
- 适配器模式用来将新的模型适配成已有的视图和控制器
- Model2是MVC在Web上的应用
- 在Model2中,控制器实现成Servlet,而JSP/HTML实现视图