设计模式--中介(Mediator)模式
时隔很长一段时,现在又重温设计模式,上个星期学习《设计模式--代理(Proxy)模式》http://www.cnblogs.com/insus/p/4128814.html。
温故而知新,这次学习另一个设计模式,中介者(Mediator)模式,学习之前,先从下面的问题开始。
在前一段时间,Insus.NET有在论坛上看到一个问题,后来尝试写了几个实现的方法《控制网页的Panel是否显示》http://www.cnblogs.com/insus/p/4070318.html 。网友的问题是比较有规律,月份对应的是Panel ID后缀来显示相对应的Panel控件。
因此Insus.NET在网页的cs直接去实现。但几个方法中,都离不开循环for与查找Fincontrol()网页aspx的Panel的控件。
今天Insus.NET一个方法,使用设计模式的中介者模式来解,它既不需要for循环,也不使用到FindControl()方法来查找。
先来看看中介者模式的定义: 英文:Define an object that encapsulates how a set of objects interact. Mediator promotes loose coupling by keeping objects from referring to each other explicitly, and it lets you vary their interaction independently. 中文:定义一个对象,该对象封装了一组对象如何交互。 中介促进松散耦合通过保持指的对象从对方明确,独立和它可以让你改变他们的交互。
我们创建一个抽象中介者类:
实际的中介者类,实现了抽象中介者Mediator,并override两个方法AppendControl()和Show():
上面的Show()方法,它带有一个参数,传入的是月份,它就会显示相的Panel控件。
看到这里,怎样,面向对象Object Oriented,OO,接口(抽象),封装......
如果使用前端js或是jQuery来去控制显示与否,它与面象对象的远离了。任何有它好的一面,也有不足的一面。
来个假设,如果网友的问题的Panel控件ID并没有规则,而是一些杂乱的字符,使用for来findControl确实不好解决。因此使用中介者模式就能轻易解决它。下面Insus.NET修改一下:
<asp:Panel ID="Panelsf" runat="server" Visible="false">一</asp:Panel>
<asp:Panel ID="Panelwrt" runat="server" Visible="false">二</asp:Panel>
<asp:Panel ID="Panel58sg" runat="server" Visible="false">三</asp:Panel>
<asp:Panel ID="Panelwre4" runat="server" Visible="false">四</asp:Panel>
<asp:Panel ID="Paneljif" runat="server" Visible="false">五</asp:Panel>
<asp:Panel ID="Panel24fg" runat="server" Visible="false">六</asp:Panel>
<asp:Panel ID="Panelf4g" runat="server" Visible="false">七</asp:Panel>
<asp:Panel ID="Panelhwer" runat="server" Visible="false">八</asp:Panel>
<asp:Panel ID="Panelloi" runat="server" Visible="false">九</asp:Panel>
<asp:Panel ID="Panel18iu" runat="server" Visible="false">十</asp:Panel>
<asp:Panel ID="Panel1jrs" runat="server" Visible="false">十一</asp:Panel>
<asp:Panel ID="Panel14tt" runat="server" Visible="false">十二</asp:Panel>
下面是cs的修改:
运行结果,今天已经是12月1号了:
Ok,今天学习设计模式的中介者模式,并在应用中展示。机会可以学习更多......
设计模式--中介(Mediator)模式的更多相关文章
- 7. 星际争霸之php设计模式--中介者模式
题记==============================================================================本php设计模式专辑来源于博客(jymo ...
- 深入浅出设计模式——中介者模式(Mediator Pattern)
模式动机 在用户与用户直接聊天的设计方案中,用户对象之间存在很强的关联性,将导致系统出现如下问题: 系统结构复杂:对象之间存在大量的相互关联和调用,若有一个对象发生变化,则需要跟踪和该对象关联的其他 ...
- Java设计模式-中介者模式(Mediator)
中介者模式也是用来降低类类之间的耦合的,因为如果类类之间有依赖关系的话,不利于功能的拓展和维护,因为只要修改一个对象,其它关联的对象都得进行修改.如果使用中介者模式,只需关心和Mediator类的关系 ...
- 设计模式-中介者模式(Mediator)
场景分析: 众所周知,电脑有很多组成部分,如硬盘.内存.光驱.音频.键盘等,各个组件之间协同工作才能保证电脑的正常运行. 如果各个组件之间直接交互,可能会比较复杂,如下图: 将上面的各个组件抽象成类, ...
- javascript设计模式--中介者模式(Mediator)
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- 24种设计模式--中介者模式【Mediator Pattern】
各位好,大家都是来自五湖四海,都要生存,于是都找了个靠山——公司,给你发薪水的地方,那公司就要想尽办法盈利赚钱,盈利方法则不尽相同,但是作为公司都有相同三个环节:采购.销售和库存,这个怎么说呢?比如一 ...
- 设计模式-中介者模式(Mediator)
/***中介者模式在消息队列中的应用*/package test.mediator; public abstract class Message { private Messages messages ...
- 大话设计模式--中介者模式 Mediator --C++实现实例
1. 中介者模式: 用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立改变他们之间的交互. Mediator的出现减少了各个Colleague的耦 ...
- 23种设计模式--中介者模式-Mediator Pattern
一.中介者模式的介绍 中介者模式第一下想到的就是中介,房子中介,婚姻中介啊等等,当然笔者也希望来个婚姻中介给我介绍一个哈哈哈,,回归正题中介者模式分成中介者类和用户类,根据接口编程的方式我们再 ...
随机推荐
- Windows调试学习笔记:(二)WinDBG调试.NET程序示例
好不容易把环境打好了,一定要试试牛刀.我创建了一个极其简单的程序(如下).让我们期待会有好的结果吧,阿门! using System; using System.Collections.Generic ...
- JSON处理
var ajax = function () { mui.ajax(projectPath+'/goods/goodsprice.do', { dataType: 'json', type: 'pos ...
- ORACLE 日期函数[转载]
一. 常用日期数据格式 .Y或YY或YYY 年的最后一位,两位或三位 SQL> Select to_char(sysdate,'Y') from dual; TO_CHAR(SYSDATE,'Y ...
- 使用jQuery开发iOS风格的页面导航菜单
在线演示1 本地下载 申请达人,去除赞助商链接 iOS风格的操作系统和导航方式现在越来越流行,在今天的jQuery教程中,我们将介绍如何生成一个iphone风格的菜单导航. HTML代码 我们 ...
- Android ListView OnItemLongClick和OnItemClick事件内部细节分享以及几个比较特别的属性
本文转自 http://blog.sina.com.cn/s/blog_783ede030101bnm4.html 作者kiven 辞职3,4个月在家休息,本以为楼主要程序员逆袭,结果失败告终继续码农 ...
- p范数(p norm)
先回顾一下范数的定义(en.wikipedia.org/wiki/Norm_(mathematics)): Given a vector space V over a subfield F of th ...
- Unity不同平台生成中预处理的注意点
http://blog.csdn.net/pandawuwyj/article/details/7959335 Unity3D的项目,这周吃亏在宏上了.大背景是项目需要在Unity中用Hudson自动 ...
- Contractive Auto-Encoder
本博客已经迁往http://www.kemaswill.com/, 博客园这边也会继续更新, 欢迎关注~ Contractive Autoencoder(CAE)是Bengio等人在2011年提出的一 ...
- [转] VB之Val()函数的使用
在VB中,也许你或多或少会希望得到的数据转换成数字类型,数字类型既可以是整形,单精度,双精度,浮点数,只要是数字类型这个都可以使用,不过此函数只返回字符串中包含的数字,若第一个字符为字母或者非数字字符 ...
- JAVA和C# 3DES加密解密
最近 一个项目.net 要调用JAVA的WEB SERVICE,数据采用3DES加密,涉及到两种语言3DES一致性的问题, 下面分享一下, 这里的KEY采用Base64编码,便用分发,因为Java的B ...