zoukankan      html  css  js  c++  java
  • 设计模式--中介(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>
    View Code

    下面是cs的修改:


    运行结果,今天已经是12月1号了:



    Ok,今天学习设计模式的中介者模式,并在应用中展示。机会可以学习更多......

  • 相关阅读:
    Spark Streaming 应用实例
    Spark Streaming 应用实例
    利用 Spark Streaming 构建高效健壮的流数据计算系统注意事项
    利用 Spark Streaming 构建高效健壮的流数据计算系统注意事项
    Kafka 集群搭建步骤
    Kafka 集群搭建步骤
    php微信开发-tp5下验证服务器的代码
    php微信公众号开发,入门篇(实现了关注公众号发送欢迎信息,发关键词自回复)
    【php技术】PHP错误类型和屏蔽方法
    自制在线富文本编辑器,精简完整版
  • 原文地址:https://www.cnblogs.com/insus/p/4134383.html
Copyright © 2011-2022 走看看