23中设计模式详解

23中设计模式详解

ID:14166655

大小:99.00 KB

页数:49页

时间:2018-07-26

23中设计模式详解_第1页
23中设计模式详解_第2页
23中设计模式详解_第3页
23中设计模式详解_第4页
23中设计模式详解_第5页
资源描述:

《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

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。