师父让我来炼丹话说,很久以前,武林中各大门派林立,百家争鸣,忽然《九阴真经》再现江湖,各大门派各自暗中派出高手争抢,都想独吞《九阴真经》,习得神功,一统江湖。闯荡江湖,当然必备各种良药防身,小帅师父在华山脚下的仙草药房,生意忽然好了很多,各种丹药销量大增。师父苦心研制的丹药受到的武林人士的肯定,很是开心,其中的行军丹,金创药,黑玉断续膏,号称镇店三宝。订单如雪花般飞来,师父命小帅在后院加班加点生产,但是由于各种特效药制作工艺复杂,小帅和几个伙计忙的团团转。客官要问炼丹的场所在何处?说出来有点不好意思,就在药房的后院。药品的生产代码如下:不用设计模式药品抽象类
abstractpublicclassDrug{/***药品名称*/Stringname;/***功效*/Stringefficacy;publicvoidpacking(){System.out.println("打包药品:"+name);}
OverridepublicStringtoString(){//药丸的功效StringBufferdisplay=newStringBuffer();display.append("----"+name+"使用说明----\n");display.append("具有功效:"+efficacy+"\n");returndisplay.toString();}}具体药品:行军丹publicclassXingJunDanDrugextendsDrug{publicXingJunDanDrug(){name="行军丹";System.out.println("开始制作:祖传秘法秘制七天");System.out.println("制作完成--行军丹");efficacy="江湖中常见的疗伤药丸,尺寸小,便于携带,服用后见效快,恢复生命点。";}}具体药品:金疮药
publicclassJinChuangYaoDrugextendsDrug{publicJinChuangYaoDrug(){name="金疮药";System.out.println("开始制作:祖传秘法秘制七七四十九天");System.out.println("制作完成--金疮药");efficacy="闻名天下的佛门疗伤奇药,闯荡江湖必备,加速愈合,服用后立即恢复生命点。";}}具体药品:黑玉断续膏
publicclassHeiYuDuanXuGaoDrugextendsDrug{publicHeiYuDuanXuGaoDrug(){name="黑玉断续膏";System.out.println("开始制作:祖传秘法秘制九九八十一天");System.out.println("制作完成--黑玉断续膏");efficacy="传说中的稀世秘药,有再造之力,神奇无比,其价堪比黄金,服用后立即恢复生命2点。";}}仙草药房
publicclassDrugstore{/***药房接到订单生产药品*
paramtype*return*/publicDrugorderDrug(Stringtype){Drugdrug=null;System.out.println("接到订单:"+type);//生产药品if("行军丹".equals(type)){drug=newXingJunDanDrug();}elseif("金疮药".equals(type)){drug=newJinChuangYaoDrug();}elseif("黑玉断续膏".equals(type)){drug=newHeiYuDuanXuGaoDrug();}//打包药品drug.packing();returndrug;}}测试类publicclassDrugstoreTest{publicstaticvoidmain(String[]args){Drugstoredrugstore=newDrugstore();System.out.println("为保证品质,本店所有药品只接受预定:");System.out.println();//药房接到行军丹订单Drugdrug=drugstore.orderDrug("行军丹");System.out.println(drug);//药房接到金疮药订单drug=drugstore.orderDrug("金疮药");System.out.println(drug);//药房接到黑玉断续膏订单drug=drugstore.orderDrug("黑玉断续膏");System.out.println(drug);}}测试结果
为保证品质,本店所有药品只接受预定:接到订单:行军丹开始制作:祖传秘法秘制七天制作完成--行军丹打包药品:行军丹----行军丹使用说明----具有功效:江湖中常见的疗伤药丸,尺寸小,便于携带,服用后见效快,恢复生命点。接到订单:金疮药开始制作:祖传秘法秘制七七四十九天制作完成--金疮药打包药品:金疮药----金疮药使用说明----具有功效:闻名天下的佛门疗伤奇药,闯荡江湖必备,加速愈合,服用后立即恢复生命点。接到订单:黑玉断续膏开始制作:祖传秘法秘制九九八十一天制作完成--黑玉断续膏打包药品:黑玉断续膏----黑玉断续膏使用说明----具有功效:传说中的稀世秘药,有再造之力,神奇无比,其价堪比黄金,服用后立即恢复生命2点。有什么问题?所有的原材料和设备都堆在后院,杂乱不堪,而且每种药的生产工序和流程都不一样,每一种药品的生产设备都不一样。小帅和几个伙计,终日奔波在不同的药品生产设备之间,还要理清楚各种各样的草药,一不小心就弄乱了。仙草店的生意越来越好,小帅和伙计很本忙不过来,药品的产量却越来越低了。“有问题啊,药房类直接依赖具体的药品类,药品类直接在药房类中创建,药房类和具体的药品类高耦合,这违反了依赖倒置原则:要依赖抽象,不要依赖具体类。还有,药房既负责销售又负责生产,增加了复杂性,功能不够单一啊,这违反了单一职责原则”,有一天,师父忽然有感而发。小帅在旁边听得一脸懵逼,感觉和师父不是同一个时代的人。过了几日,黑玉断续膏的原料断货,停止生产,师父又开发了一款新药,灵葫仙丹,恢复内力很有疗效,深受各路武林人士喜爱,马上加入生产。“还是有问题啊,每停止生产或者新生产一款药品,都要修改药店的设备和原料,对店铺影响很大啊“,有一天师父在院子里打坐,若有所思的说,接着忽然冒出一句奇怪的话来:“这违反了开闭原则,应该对扩展开发,对修改封闭”。听得小帅一头雾水。这一不小心就违反了三大设计原则:依赖倒置原则,单一职责原则,开闭原则。。。这该如何是好?小帅每日苦苦思索,始终不得要领,脸上多了几分与年龄不相符的忧愁,再想下去,头发都要掉了,只好向师父请教。师父微微一笑,心中早有对策。没过几日,师父忽然决定在店铺附近的山脚下建一个工厂,把原材料和设备都搬过去,专门生产药品,店里只负责销售,让销售和生产分离开来。“师父你要建一个工厂?”“嗯,一个简单的工厂。”师父专门拨了一大笔银两,找了村里最能干的几位壮士,几个月后一个崭新的工厂就建好了,小帅和伙计们都高高兴兴地搬了进去。简单工厂简单工厂的类图如下:(图片来源: