時隔很長一段時,如今又重溫設計模式,上個星期學習《設計模式--代理(Proxy)模式》http://www.cnblogs.com/insus/p/4128814.html。
溫故而知新,此次學習另外一個設計模式,中介者(Mediator)模式,學習以前,先從下面的問題開始。html
在前一段時間,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():
ide
上面的Show()方法,它帶有一個參數,傳入的是月份,它就會顯示相的Panel控件。
post
看到這裏,怎樣,面向對象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>
Ok,今天學習設計模式的中介者模式,並在應用中展現。機會能夠學習更多......
設計