欢迎来到天天文库
浏览记录
ID:14166655
大小:99.00 KB
页数:49页
时间:2018-07-26
《23中设计模式详解》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、23中设计模式详解比如在玩“极品飞车”这款游戏,游戏中有对汽车进行喷涂鸦的功能,而且这个喷涂鸦是可以覆盖的,并且覆盖的顺序也影响到最后车身的显示效果,假设现在喷涂鸦具有2种样式:(1)红色火焰 (2)紫色霞光如果使用“继承父类”设计这样的功能,那么类图就像如下的这样:从图中可以看到使用继承来实现这种功能,并且是2种涂鸦样式,就需要创建4个子类,如果喷涂鸦有3种,4种呢?这种情况就是典型中学课程学习过的“排列与组合”,那简直就是“HeadFirst设计模式”书中讲的“类爆炸”。显然继承“奥迪汽车类”的这个办法是无效,而且是非常徒劳,繁琐的。那么如何才能以“灵活”,“顺序敏感”这
2、样的需求来实现这样的功能呢?【装饰模式-JAVA代码实现】新建一个抽象汽车父类:packagecar_package;publicabstractclasscar_parent{//汽车抽象父类privateStringmake_address;privateintspeed;publicStringgetMake_address(){returnmake_address;}publicvoidsetMake_address(Stringmake_address){this.make_address=make_address;}publicintgetSpeed(){retu
3、rnspeed;}publicvoidsetSpeed(intspeed){this.speed=speed;}publicabstractvoidprint_face();}然后新建一个奥迪汽车子类packagecar_package;publicclassaudi_subextendscar_parent{//奥迪汽车子类@Overridepublicvoidprint_face(){System.out.println("audi车默认的颜色为 黑色");}}然后再新建一个装饰者父类:packagedecorator_package;importcar_package.
4、car_parent;publicabstractclassdecorator_parentextendscar_parent{//装饰者父类protectedcar_parentcar_parent_ref;publicvoidsetCar_parent_ref(car_parentcar_parent_ref){this.car_parent_ref=car_parent_ref;}@Overridepublicvoidprint_face(){car_parent_ref.print_face();}}然后再新建装饰者子类:红色火焰装饰者类:packagedecorat
5、or_package;publicclassdecorator_audi_redextendsdecorator_parent{@Overridepublicvoidprint_face(){super.print_face();System.out.println("给 奥迪 喷涂鸦 - 颜色为 红色火焰");}}然后再新建装饰者子类:紫色霞光装饰者类:packagedecorator_package;publicclassdecorator_audi_purpleextendsdecorator_parent{@Overridepublicvoidprint_face()
6、{super.print_face();System.out.println("给 奥迪 喷涂鸦 - 颜色为 紫色霞光");}}新建一个运行类packagemain_run;importcar_package.audi_sub;importdecorator_package.decorator_audi_purple;importdecorator_package.decorator_audi_red;publicclassmain_run{publicstaticvoidmain(String[]args){audi_subaudi_sub_ref=newaudi_sub(
7、);audi_sub_ref.setMake_address("北京市朝阳区");audi_sub_ref.setSpeed(200);decorator_audi_reddecorator_audi_red_ref=newdecorator_audi_red();decorator_audi_red_ref.setCar_parent_ref(audi_sub_ref);decorator_audi_purpledecorator_audi_purple_ref=newdecorator_audi_p
此文档下载收益归作者所有