古人常說大隱隱於市,大概很多的模式最終都會走上這條幕後之路,在層層框架的封裝包裹之下,他們的本來面目漸漸淡出程式猿們的視野,甚至被遺忘;而事實上,他們卻在程式猿們的眼皮子底下吶喊。
恩恩,今天是遲來的第二篇,咱們來談談門面模式。
年輕時的父親是頂著光環的存在,十里八鄉,造磚造瓦、燒窯蓋房的,總少不得有人來請父親主持大事。
父親總是能讓鄉親們把土胚老屋換成紅磚新房,這從無到有的過程,從尋土到製磚製瓦,再到煤餅的製作,到磚窯瓦窯的建設,再到燒製;從房子地基的設計挖掘,到砌牆,到門窗安裝,再到樓層鋪設,到收棟封頂,再到固頂鋪瓦。事無鉅細,清清楚楚,行雲流水,讓人嘆服。
年幼的我無法想象乙個人的大腦是如何裝得下這許多,當我發現周圍的成年人們也和我一樣,是以45度角仰望父親時,我大概能明白這恐怕不是一件普通人能夠做得好的事情。多年以後,當我踩出程式猿人的腳印時,我仍然記得人們45度角的目光,於是我嘗試做一件與父親當年類似的事情。
// 生成訊息文字
string msgtext = username + "logined at (new date()).tolocalestring()";
// 連線到activemq伺服器
activemqconnectionfactory factory =new activemqconnectionfactory("tcp://localhost:61616");
// 建立activemq連線
connection connection =factory.createconnection();
connection.start();
// 建立會話
session session =connection.createsession(false, session.auto_acknowledge);
// 建立主題
topic topic =session.createtopic("online.users");
// 建立訊息發布者
messageproducer producer =session.createproducer(topic);
producer.setdeliverymode(deliverymode.non_persistent);
// 建立訊息體
textmessage message =session.createtextmessage();
message.settext(msgtext);
// 傳送訊息
producer.send(message);
當**執行後,真的可以每個使用者收到訊息通知時,我激動莫名,直以為循著父親的足跡可以邁向先賢之路。卻不知道,這僅僅是乙個開始。
父親漸漸年邁,不覺然間我亦近而立。多少年了,父親沒有再被請去主持造磚蓋房的事業,卻迎來了我的第一幢房子的動工。
父親沒有再尋土,不再造磚模瓦模,也不再做煤餅,更不再造磚窯瓦窯了;找到磚瓦廠的**,聯絡了司機,工地上便陸續堆起了磚瓦。父親請來了工匠,房子地基很快打好,門窗也做好,於是乎鋪樓蓋瓦,砌地刷牆,父親不再事事躬親,似乎成了乙個看客。然而,房子依然很快便造好了;工期比父親以前主持的時間短很多很多,而父親即使年邁,也覺得輕鬆無比。
看來,造房子其實不需要那麼複雜,更不用那麼辛苦。
我回顧了自己的程式猿之路,發現先賢與我不同,他們所為近乎於道,而我只是蹣跚學步的小猿人而已。我徹夜未眠,或許我可以把**改的好看一點:
class publisher{
private connection connection = null;
private messageproducer producer = null;
public publisher(string url, topicname) {
// 連線到activemq伺服器
activemqconnectionfactory factory= new activemqconnectionfactory(url);
// 建立activemq連線
connection =factory.createconnection();
connection.start();
// 建立會話
session session =connection.createsession(false, session.auto_acknowledge);
// 建立主題
topic topic =session.createtopic(topicname);
// 建立訊息發布者
producer =session.createproducer(topic);
producer.setdeliverymode(deliverymode.non_persistent);
public void send(string text) {
// 建立訊息體
textmessage message =session.createtextmessage();
message.settext(text);
// 傳送訊息
producer.send(message);
string msgtext = username + "logined at (new date()).tolocalestring()";
publisher publisher = new publisher("tcp://localhost:61616","online.users");
publisher.send(msgtext);
恩,似乎從父親的身上,我又領悟到了些什麼。
貌似這樣做之後,我不用再費力維護**的初始化順序,也不用理會之間的細節關係和流程。而且**看上去更容易理解了,更是隱約間覺得,如果我要給隱身的使用者傳送訊息的話,**也跟著變得簡單易懂了。
時光匆匆,屌絲仍然是屌絲,但不同的是,屌絲也有了家室,有了一歲的女兒。某天夫人問我,該給女兒買什麼樣的玩具?我幾乎沒有思考的說積木。很快積木回來了,我一邊拆著包裝一邊自語:嗨,我還從來沒玩過積木呢。夫人笑著說:敢情這積木是買給你,滿足你童年願望的啊?
女兒從我手上搶積木,我沒讓,專注的磊著橋梁,高塔,城堡,高達……,女兒一次次推倒我的作品,我一次次的重建。
我在想,我的程式猿生涯的那些**,何時做得跟積木一樣?
我又回顧了那一段**,或許我可以做得更好:
@autoware
publisher publisher;
string msgtext = username + "logined at (new date()).tolocalestring()";
publisher.send("online.users",msgtext);
噢噢,這不算。
或許這樣才算是更好:
恩恩,好像又冒出了另乙個東西:http?
是的,**的封裝是無止境的,君不見各種sdk、api、jar;各種soa、web service介面、rest介面層出不窮,漫漫程式猿人路啊……
最近有科技報道說,世界上最先進的神經網路已經達到4歲兒童的智力水平了,人類追求進步的腳步從未停止,即使施瓦辛格從未來穿越回來要行滅絕人類之事。
門面模式的發展很快會淹沒在雲端,未來的程式猿,做的更多的事情會是粘合劑的工作,用一條業務邏輯,穿插於各個雲層之間。上帝的宮殿,是由雲堆砌而成……
設計模式之門面模式
coding gbk coding utf 8 author edgar 這是門面模式的乙個應用場景。具體故事情節請見 設計模式之禪 門面模式把一套方法封裝起來,使用者不需要知道具體的實現細節。class letterprocessimpl object def writecontext self,...
設計模式之門面模式
模式定義 為子系統中的一組介面提供乙個統一的高層介面,使子系統更容易使用。該模式通過外觀介面與子系統 互動,而不與具體的子系統中的細節互動。分層結構 mvc web應用中的三層結構 遵循原則 迪公尺特原則 最少知識原則,你不需要知道的你就不要知道,你知道幹什麼?封裝變化部分。適用場合 1 乙個系統複...
設計模式之門面模式
外觀模式定義了乙個高層介面,讓子系統更容易使用 結構性場景 有個 允許使用者用自己的積分來兌換商店內禮物,兌換需要經過校驗積分,支付積分,生成訂單的過程,單對呼叫兌換積分的介面來說不用關心裡面的三個過程,只需關心呼叫兌換積分的介面 新建積分兌換禮物實體類 package com.tangbaobao...