“戲”說設計模式——外觀(門面)模式
首先請出今天的主人公——“黑旋風”李逵
李逵:“我是不是萌萌噠?”
一部《水滸傳》說盡了一群英雄好漢的悲歡離合!經典著作的水滸,含蓄地概括了中國各個朝代的變遷和演變,客觀地揭露了頑固的中國倫理道德,以及那些倫理道德對國人的愚弄和危害。
故事劇情
宋江酒後在潯陽樓上題詩,被無為軍在閒通判黃文炳解讀為反詩,向江州蔡九知府蔡得章告發,宋江因此被打入大牢。其後戴宗為救宋江,傳了一封梁山泊造的假信,亦被黃文炳識破。宋、戴二人被判死刑,押到十字路口待斬。 [14]
為救二人,梁山二十餘條好漢趕到江州,劫了法場。李逵在不知梁山方面行動的情況下,也獨自從預先藏身的樓上跳下,砍翻兩個劊子手,與梁山眾人同時在法場裡廝殺。救出宋、戴二人後,李逵殺得性起,逢人便砍,梁山首領
從故事劇情中我們得知李逵使用一把板斧劫了法場。
我們都知道板斧是由木頭柄和鐵製的斧構成。那麼想要得到一把板斧需要這兩樣物品的組合。
我們於是定義一個木頭類和鐵類:
public class FaMuGong {//伐木工 public void FaMu(){//伐木 System.out.println("我是伐木工,我伐木。得到【木頭】"); } } public class TieJiang {//鐵匠 public void LianTie(){//鍊鐵 System.out.println("我是鐵匠,我鍊鐵。得到【鐵】"); } }
接下來,有請“黑旋風”李逵,那麼他的情節就是打抱不平!
public class LiKui {//李逵
public void DaBaoBuPing(String BanFu){
System.out.println("我是李逵,我打抱不平。得到【板斧】");
}
}
這個故事是在江州發生的,所以我們來描繪一個場景為眾英雄好漢提供展示情節的舞臺。
public class JiangZhou {//江州 public static void main(String[] args) { //找伐木工,得到【木頭】 FaMuGong faMuGong = new FaMuGong(); faMuGong.FaMu(); //找鐵匠,得到【鐵】 TieJiang tieJiang = new TieJiang(); tieJiang.LianTie(); //李逵開始劫法場,打抱不平!!! LiKui liKui = new LiKui(); liKui.DaBaoBuPing(); } }
劇情開始!action!
那麼問題來了,李逵有點不耐煩了。
李逵:“俺打抱不平,使一把板斧,我還要去伐木和鍊鐵啊!!!氣煞我也”
那麼我們應該怎麼辦呢?其實李逵好漢去武器店買一把不就問題解決了嘛!這樣,我們來看看這個武器店是什麼樣的
public class WuQiDian {//武器店
private FaMuGong faMuGong;//伐木工
private TieJiang tieJiang;//鐵匠
public WuQiDian() {
this.faMuGong = new FaMuGong();
faMuGong.FaMu();//從伐木工那裡得到【木頭】
this.tieJiang = new TieJiang();
tieJiang.LianTie();//從鐵匠那裡得到【鐵】
}
public String buy(){
String BanFu = "板斧";
System.out.println("本店出售【板斧】");
return BanFu;
}
}
重新定義一個江州場景
public class JiangZhou {//江州
public static void main(String[] args) {
WuQiDian wuQiDian = new WuQiDian();
LiKui liKui = new LiKui();
String BanFu = wuQiDian.buy();//從武器店得到板斧
liKui.DaBaoBuPing(BanFu);//開始打抱不平
}
}
劇情開始!action!
我們看到李逵直接從武器店得到了板斧,並不需要分別找到伐木工和鐵匠,這樣簡化了得到板斧的流程,大大縮短了時間。
在生活也是如此的,我們購買的大部分物品都是加工或再加工好的,我們使用即可,完全不需要考慮它的構成和原理。
在一個大系統中,會有很多小的元件,這些元件之間有著複雜的邏輯關係,對於我們來說,直接使用這些小的元件會變得十分麻煩,所以通過“外觀模式”就相當於一個“武器店”,相當於一個介面對外界暴露,我們使用即可。