很久以前,小小少女情懷的我,懷揣一個美麗的春夢,那就是找一個男孩兒,從心動走到古稀,隨著時間的推移,我聽到這樣的話語,你太天真,可是我仍然愿意相信,冰心對鐵凝說的那句話,你不要找,你要等。愛情是美好的,但不是每個人都能收獲自己的愛情,別擔心,婚慶公司幫你忙,百合網是中國第一家實名制婚戀服務商,以“幫助億萬中國人擁有幸福的婚姻和家庭”為己任。2005年5月,百合網正式發布,并在中國首次推出“心靈匹配,成就幸福婚姻”的獨特婚戀服務模式。
2007年3月,百合網成為第一個采用公安部身份認證系統的婚戀網站。百合網率先實行實名制。目前,已有超過7000萬注冊用戶在百合網上尋找他們的終生伴侶。今天我們的設計模式就從婚姻公司開始說起---中介者模式。顧名思義,中介的意思就是指在不同事物或同一事物內部對立兩極之間起居間聯系作用的環節。官方定義,用一個中介對象來封裝一系列的對象交互,中介者使各對象不需要顯式地相互作用,從而使其耦合松散,而且可以獨立地改變她們之間的交互,來看一下中介者模式的結構圖:
? ? ? ? ?
依然以我們上述的婚慶公司為例,來探究一下中介者模式是如何應用的,試想一下,在沒有婚慶公司之前,大家之間的交流是這個樣子的:
? ? ? ? ?
大家看著是不是有種凌亂的感覺,如果人的數目多起來就會變成網狀的結構啦。在我們的軟件世界中,原本把一個系統分割成一些對象是可以增強復用性的,但是現在的情況是,這些兌現之間存在著大量的聯系,耦合性極高。這是很不利于復用的,同時這種情況使得系統的靈活性大大的降低,使得對系統的擴展很難。如果現在可以借助婚慶公司,那么可以采用另一種方式設計上述的案例,如下:
? ? ? ? ??
看看“網狀結構”和“星形結構”的區別,顯然采用星形結構就可以避免上面的網狀結構存在的問題了,實際上這里的婚慶公司就是指的中介,大家可以通過婚慶公司來進行交流。看一下這個例子的代碼結構圖:
? ? ? ? ? ?
接著來看一下,我們的代碼實現:
~~~
using?System;??
using?System.Collections.Generic;??
using?System.Linq;??
using?System.Text;??
using?System.Threading.Tasks;??
??
namespace?ConsoleApplication2??
{??
????class?Program??
????{??
????????static?void?Main(string[]?args)??
????????{??
????????????Baihe?Bh?=?new?Baihe();??
????????????Boy?c1?=?new?Boy(Bh);??
????????????Girl?c2=new?Girl?(Bh?);??
??
????????????Bh.Colleague1?=?c1;??
????????????Bh.Colleague2?=?c2;??
??
????????????c1.Declare("我想找一個女朋友,給她世上最好的溫柔!");??
????????????c2.Declare("如果明天的路,你不知道該往哪兒走,就留在我身邊好不好!");??
??
????????????Console.Read();??
????????}??
????}??
????//婚慶公司類,相當于Mediator類??
????//婚慶公司??
????abstract?class?WeddingCompany??
????{??
????????//聲明??
????????public?abstract?void?Declare(string?message,?People?colleague);??
????}??
??
????//人類?相當于Colleague類??
????abstract?class?People??
????{??
????????protected?WeddingCompany?mediator;??
??
????????public?People?(WeddingCompany?mediator)??
????????{??
????????????this.mediator?=?mediator;??
????????}??
????}??
??
?????//男孩類?相當于ConcreteColleague1類??
????//男孩??
????class?Boy?:People??
????{??
????????public?Boy(WeddingCompany?mediator):base(?mediator?)??
????????{?}??
????????//聲明??
????????public?void?Declare?(string?message)??
????????{??
????????????mediator.Declare(message,?this);??
????????}??
??
????????//獲得信息??
????????public?void?GetMessage(string?message)??
????????{??
????????????Console.WriteLine("我想找一個女朋友,給她世上最好的溫柔");??
????????}??
????}??
??
????//女孩類?相當于ConcreteColleague2類??
????//女孩??
????class?Girl:People??
????{??
???????public?Girl?(WeddingCompany?mediator):base(mediator?)??
????????{?}??
????????//聲明??
????????public?void?Declare(string?message)??
???????{??
???????????mediator.Declare(message,?this);??
???????}??
????????//獲得消息??
????????public?void?GetMessage(string?message)??
????????{??
????????????Console.WriteLine("如果明天的路,你不知道往哪兒走,就留在我身邊好不好");??
????????}??
????}??
??
????//具體的婚慶公司,百合網這里相當于ConcreteMediator類??
????//百合網??
????class?Baihe:WeddingCompany??
????{??
????????private?Boy?colleague1;??
????????private?Girl?colleague2;??
??
????????//男孩??
????????private?Boy?Colleague1??
????????{?set?{?colleague1?=?value;?}?}??
????????//女孩??
????????private?Girl?Colleague2??
????????{?set?{?colleague2?=?value;?}?}??
??
????????//聲明??
????????public?override?void?Declare(string?message,?People?colleague)??
????????{??
????????????if?(colleague?==colleague1?)??
????????????{??
????????????????colleague2.GetMessage(message);??
????????????}??
????????????else??
????????????{??
????????????????colleague1.GetMessage(message);??
????????????}??
????????}??
??
????}??
}??
~~~
也許有一天,他真的會出現在我面前,那個在陽光底下微笑的少年,也許有一天,我們會一起去看北極光,我會和他一起仰望星空,談論當初冰心對鐵凝說的話,我不知道直到多久以后的某一天,他真的會出現,但可以確定的是,編程就是生活。