时隔很长一段时,现在又重温设计模式,上个星期学习《设计模式--代理(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)模式的更多相关文章

  1. 7. 星际争霸之php设计模式--中介者模式

    题记==============================================================================本php设计模式专辑来源于博客(jymo ...

  2. 深入浅出设计模式——中介者模式(Mediator Pattern)

    模式动机 在用户与用户直接聊天的设计方案中,用户对象之间存在很强的关联性,将导致系统出现如下问题: 系统结构复杂:对象之间存在大量的相互关联和调用,若有一个对象发生变化,则需要跟踪和该对象关联的其他 ...

  3. Java设计模式-中介者模式(Mediator)

    中介者模式也是用来降低类类之间的耦合的,因为如果类类之间有依赖关系的话,不利于功能的拓展和维护,因为只要修改一个对象,其它关联的对象都得进行修改.如果使用中介者模式,只需关心和Mediator类的关系 ...

  4. 设计模式-中介者模式(Mediator)

    场景分析: 众所周知,电脑有很多组成部分,如硬盘.内存.光驱.音频.键盘等,各个组件之间协同工作才能保证电脑的正常运行. 如果各个组件之间直接交互,可能会比较复杂,如下图: 将上面的各个组件抽象成类, ...

  5. javascript设计模式--中介者模式(Mediator)

    <!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. 24种设计模式--中介者模式【Mediator Pattern】

    各位好,大家都是来自五湖四海,都要生存,于是都找了个靠山——公司,给你发薪水的地方,那公司就要想尽办法盈利赚钱,盈利方法则不尽相同,但是作为公司都有相同三个环节:采购.销售和库存,这个怎么说呢?比如一 ...

  7. 设计模式-中介者模式(Mediator)

    /***中介者模式在消息队列中的应用*/package test.mediator; public abstract class Message { private Messages messages ...

  8. 大话设计模式--中介者模式 Mediator --C++实现实例

    1. 中介者模式: 用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立改变他们之间的交互. Mediator的出现减少了各个Colleague的耦 ...

  9. 23种设计模式--中介者模式-Mediator Pattern

    一.中介者模式的介绍     中介者模式第一下想到的就是中介,房子中介,婚姻中介啊等等,当然笔者也希望来个婚姻中介给我介绍一个哈哈哈,,回归正题中介者模式分成中介者类和用户类,根据接口编程的方式我们再 ...

随机推荐

  1. 用飞信监控GoldenGate进程

    监控GoldenGate进程 1)         在goldengate安装目录下建立文件ogginfo $vim ogginfo  info all 2)         配置飞信报警       ...

  2. Win8.1 远程桌面 凭据无法工作

    最近遇到一个杯具的事情 电脑重装完系统后,发现 win7/server08/server12 无法远程到我的电脑了- 每次连接都显示如下:   灵异的是从 xp 和 server03 能远程进来-   ...

  3. 【Linux】——sleep无法正常休眠

    最近在开发项目的时候遇到一个问题,当使用 sleep(2) 的时候,程序居然没有按照指定的时间去休眠,但是连续执行两次 sleep(2) 的时候,程序可以正常的休眠 2 秒.真是见鬼了.最后查看了以下 ...

  4. 使用Fragment应用放置后台很久,被系统回收,出现crash

    使用Fragment应用放置后台很久,被系统回收,出现crash:原因:系统做了源码FragmentActivity调用onSaveInstanceState保存Fragment对象,这时候系统恢复保 ...

  5. SQL SERVER 服务启动后停止,某些服务由其它服务或程序使用时将自动停止

    发生症状: 先是服务器挂掉,之后服务器可以登陆,但是实例却不能登陆进去(部分).出现的错误日志如下: :: R2 (SP2) - 10.50.4000.0 (X64) Jun :: Copyright ...

  6. 用户控件的设计要点 System.Windows.Forms.UserControl

    用户控件的设计要点 最近的项目中有一个瀑布图(彩图)的功能,就是把空间和时间上的点量值以图的形式呈现出来,如下图: X坐标为空间,水平方向的一个像素代表一个空间单位(例如50米) Y坐标为时间,垂直方 ...

  7. jade模板引擎学习笔记(WebsStorm9.0.3+ nodejs+express+jade)

    jade环境搭建 jade标签写法 jade注释 jade添加类名.id.属性 jade添加脚本,css jade变量 jade多行文本显示 jade流程代码:for,each,while jade流 ...

  8. twisted 学习笔记二:创建一个简单TCP客户端

    #coding=utf-8 from twisted.internet import reactor,protocol class QuickClient(protocol.Protocol): de ...

  9. Ranorex 5 发布,支持SAP、Oracle Forms、MS Dynamics等

    Ranorex 5 发布,支持SAP.Oracle Forms.MS Dynamics等 http://blog.csdn.net/testing_is_believing/article/detai ...

  10. [LeetCode] Sparse Matrix Multiplication

    Problem Description: Given two sparse matrices A and B, return the result of AB. You may assume that ...