设计模式应用与发展之门面模式(java)


1     引子

在上一篇中,工厂模式终于跌进了核武器时代……

古人常说大隐隐于市,大概很多的模式最终都会走上这条幕后之路,在层层框架的封装包裹之下,他们的本来面目渐渐淡出程序猿们的视野,甚至被遗忘;而事实上,他们却在程序猿们的眼皮子底下呐喊。

恩恩,今天是迟来的第二篇,咱们来谈谈门面模式。

2     父亲的手艺

年轻时的父亲是顶着光环的存在,十里八乡,造砖造瓦、烧窑盖房的,总少不得有人来请父亲主持大事。

父亲总是能让乡亲们把土胚老屋换成红砖新房,这从无到有的过程,从寻土到制砖制瓦,再到煤饼的制作,到砖窑瓦窑的建设,再到烧制;从房子地基的设计挖掘,到砌墙,到门窗安装,再到楼层铺设,到收栋封顶,再到固顶铺瓦。事无巨细,清清楚楚,行云流水,让人叹服。

年幼的我无法想象一个人的大脑是如何装得下这许多,当我发现周围的成年人们也和我一样,是以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);

当代码运行后,真的可以每个用户收到消息通知时,我激动莫名,直以为循着父亲的足迹可以迈向先贤之路。却不知道,这仅仅是一个开始。

3     自己的房子

父亲渐渐年迈,不觉然间我亦近而立。多少年了,父亲没有再被请去主持造砖盖房的事业,却迎来了我的第一幢房子的动工。

父亲没有再寻土,不再造砖模瓦模,也不再做煤饼,更不再造砖窑瓦窑了;找到砖瓦厂的电话,联系了司机,工地上便陆续堆起了砖瓦。父亲请来了工匠,房子地基很快打好,门窗也做好,于是乎铺楼盖瓦,砌地刷墙,父亲不再事事躬亲,似乎成了一个看客。然而,房子依然很快便造好了;工期比父亲以前主持的时间短很多很多,而父亲即使年迈,也觉得轻松无比。

看来,造房子其实不需要那么复杂,更不用那么辛苦。

我回顾了自己的程序猿之路,发现先贤与我不同,他们所为近乎于道,而我只是蹒跚学步的小猿人而已。我彻夜未眠,或许我可以把代码改的好看一点:

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);

恩,似乎从父亲的身上,我又领悟到了些什么。

貌似这样做之后,我不用再费力维护代码的初始化顺序,也不用理会之间的细节关系和流程。而且代码看上去更容易理解了,更是隐约间觉得,如果我要给隐身的用户发送消息的话,代码也跟着变得简单易懂了。

4     女儿的积木

时光匆匆,屌丝仍然是屌丝,但不同的是,屌丝也有了家室,有了一岁的女儿。某天夫人问我,该给女儿买什么样的玩具?我几乎没有思考的说积木。很快积木回来了,我一边拆着包装一边自语:嗨,我还从来没玩过积木呢。夫人笑着说:敢情这积木是买给你,满足你童年愿望的啊?

女儿从我手上抢积木,我没让,专注的磊着桥梁,高塔,城堡,高达……,女儿一次次推倒我的作品,我一次次的重建。

我在想,我的程序猿生涯的那些代码,何时做得跟积木一样?

我又回顾了那一段代码,或许我可以做得更好:

@Autoware

Publisher publisher;

String msgText = userName + "logined at (new Date()).toLocaleString()";

publisher.send("Online.Users",msgText);

噢噢,这不算。

或许这样才算是更好:

String msgText = userName + "logined at (new Date()).toLocaleString()";

http.put("http://mq.gaiay.cn/onlineUsers/messages",msgText);

恩恩,好像又冒出了另一个东西:http?

是的,代码的封装是无止境的,君不见各种SDK、API、jar;各种SOA、Web Service接口、REST接口层出不穷,漫漫程序猿人路啊……

5     上帝的宫殿

最近有科技报道说,世界上最先进的神经网络已经达到4岁儿童的智力水平了,人类追求进步的脚步从未停止,即使施瓦辛格从未来穿越回来要行灭绝人类之事。

门面模式的发展很快会淹没在云端,未来的程序猿,做的更多的事情会是粘合剂的工作,用一条业务逻辑,穿插于各个云层之间。上帝的宫殿,是由云堆砌而成……

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值