首先请出今天的主人公——“黑旋风”李逵
李逵:“我是不是萌萌哒?”
一部《水浒传》说尽了一群英雄好汉的悲欢离合!经典著作的水浒,含蓄地概括了中国各个朝代的变迁和演变,客观地揭露了顽固的中国伦理道德,以及那些伦理道德对国人的愚弄和危害。
故事剧情
宋江酒后在浔阳楼上题诗,被无为军在闲通判黄文炳解读为反诗,向江州蔡九知府蔡得章告发,宋江因此被打入大牢。其后戴宗为救宋江,传了一封梁山泊造的假信,亦被黄文炳识破。宋、戴二人被判死刑,押到十字路口待斩。 [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!
我们看到李逵直接从武器店得到了板斧,并不需要分别找到伐木工和铁匠,这样简化了得到板斧的流程,大大缩短了时间。
在生活也是如此的,我们购买的大部分物品都是加工或再加工好的,我们使用即可,完全不需要考虑它的构成和原理。
在一个大系统中,会有很多小的组件,这些组件之间有着复杂的逻辑关系,对于我们来说,直接使用这些小的组件会变得十分麻烦,所以通过“外观模式”就相当于一个“武器店”,相当于一个接口对外界暴露,我们使用即可。