DesignPattern- 代理模式
来源:互联网 发布:php 文件上传ajax代码 编辑:程序博客网 时间:2024/06/05 05:14
代理模式,应该是我在工作中用的最多的一种设计模式了。
个人觉的这种设计模式能比较好的解耦和,特别是业务比较复杂的情况下。
之前重构过这样一个系统,经过分解他有几大模块组成。
我在接手这个项目的时候,它的代码完全已经在逻辑之外了。公司先后进来几个新人都跟我反馈,代码写的太难懂了。因为项目是由我来负责,老大那边直接来找我,再加上后来的bug已经多的不能修了,所以硬着头皮给重写了一下。用到了分层思想,MVC模式,回头来看,里面代码最有韵味的是代理模式了。
在接触代理模式的时候,我记得曾经看过一句话,代理模式可以对真正的行为进行拦截。拦截这词用的比较专业,其实可以直接理解在调用真正行为的时候再加上一层逻辑,这里的逻辑可能就是你的业务了
先上一张图:
上代码:
IAction:
package com.jerome.designpattern.proxy;public interface IAction {/** * 根据actionId来执行对应的action. * @param actionId */public void doAction(int actionId);}
ActionProcessor:
package com.jerome.designpattern.proxy;public class ActionProcessor implements IAction {@Overridepublic void doAction(int actionId) {// TODO Auto-generated method stub//doaction......switch(actionId) {}}}
ActionProxy:
package com.jerome.designpattern.proxy;public class ActionProxy implements IAction {private IAction mActionProcessor ;public ActionProxy(IAction actionProcessor) {mActionProcessor = actionProcessor ;}@Overridepublic void doAction(int actionId) {// TODO Auto-generated method stub///////////////////////////////交付真正处理之前先预处理一下,这里一般跟软件的业务逻辑有一定的关系/////////////////////////////mActionProcessor.doAction(actionId);}}
具体来说说在实践中是如何运用这种模式的。按照正常的逻辑,显示模块只负责显示,语音识别模块专门用于语音识别,播报模块只用来播报。首先对单个的模块定义好一系列接口,然后交由不同的开发来写实现。
但是,一个系统并不是单单由独立的模块组成的,各个独立的模块组合进去,然后加上行业的业务逻辑就形成了一个软件。那我们这里的业务就是
1.语音识别过程中停止正在播放音乐,语音识别结束开启被暂停的音乐
2.语音识别过程中停止播报
3.点击开始播报,若处在语音识别过程中终止本次语音识别
.
.
.
.
这里的模块之间是有一系列的交互的。那么按照代理模式的特点来看,就跟 “拦截”有了一系列的关系,因为在单纯的做某一模块的事情之前,你需要处理本模块跟其他模块的交互(单纯的做语音识别之前,你需要暂停音乐模块的播放事件)。
其实代理模式的一个最要的玩点就在于这个所谓的“拦截”。
- DesignPattern- 代理模式
- DesignPattern设计模式-总览
- [DesignPattern]命令模式
- [DesignPattern]剩下的模式
- DesignPattern
- DesignPattern
- DesignPattern
- 设计模式(DesignPattern)之策略模式(Strategy)
- DesignPattern(设计模式) 之 单例模式
- [DesignPattern]适配器模式与外观模式
- 【设计模式系列】之Thinking In DesignPattern
- What is a DesignPattern? 什么是设计模式
- 设计模式之策略模式(DesignPattern of Strategy)
- DesignPattern-Singleton
- DesignPattern-Builder
- [DesignPattern]DecoratorPattern
- [DesignPattern]TemplateMethodPattern
- [DesignPattern]IteratorAndCompositePattern
- 编程珠玑 第二章 习题 2 给定一个包含4300000000个32位证书的顺序文件,求出一个至少包含两次的整数
- 示波器CAN波特率
- 双向循环链表的基本操作
- 实现FusionChart动态获取数据(一)
- 加快activity显示速度,提高用户体验
- DesignPattern- 代理模式
- 英语中的非谓语动词小结
- ubuntu phpmyadmin 404 not found
- duilib DirectUI库里面的一个简单的例子RichListDemo
- linux c 网络编程 并发
- hdu 1099 数学
- 单片机下最小多任务程序
- Makefile中赋值运算符 = 与 := 的区别
- 链接、装载与库