知识大全 设计模式-快餐简解-装饰模式

Posted 霞光

篇首语:上如阶尽管费力,却一步比一步高。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 设计模式-快餐简解-装饰模式相关的知识,希望对你有一定的参考价值。

  装饰模式应用场景举例

  比如在玩 极品飞车 这款游戏 游戏中有对汽车进行喷涂鸦的功能 而且这个喷涂鸦是可以覆蓋的 并且覆蓋的顺序也影响到最后车身的显示效果 假设现在喷涂鸦具有 种样式 ( )红色火焰 ( )紫色霞光如果使用 继承父类 设计这样的功能 那么类图就像如下的这样

  

  从图中可以看到使用继承来实现这种功能 并且是 种涂鸦样式 就需要创建 个子类 如果喷涂鸦有 种 种呢?这种情况就是典型中学课程学习过的 排列与组合 那简直就是 Head First设计模式 书中讲的 类爆炸

  显然继承 奥迪汽车类 的这个办法是无效 而且是非常徒劳 繁琐的

  那么如何才能以 灵活 顺序敏感 这样的需求来实现这样的功能呢?

  【装饰模式解释

  类型 结构模式

  动态的对一个对象进行功能上的扩展 也可以对其子类进行功能上的扩展

  【装饰模式UML图

  

  【装饰模式 JAVA代码实现

  新建一个抽象汽车父类

   package car_package;public abstract class car_parent     // 汽车抽象父类    private String make_address;    private int speed;    public String getMake_address()         return make_address;        public void setMake_address(String make_address)         this make_address = make_address;        public int getSpeed()         return speed;        public void setSpeed(int speed)         this speed = speed;        public abstract void print_face();

  然后新建一个奥迪汽车子类

package car_package;public class audi_sub extends car_parent     // 奥迪汽车子类    @Override    public void print_face()         System out println( audi车默认的颜色为 黑色 );    

  然后再新建一个装饰者父类

package decorator_package;import car_package car_parent;public abstract class decorator_parent extends car_parent     // 装饰者父类    protected car_parent car_parent_ref;    public void setCar_parent_ref(car_parent car_parent_ref)         this car_parent_ref = car_parent_ref;        @Override    public void print_face()         car_parent_ref print_face();    

  然后再新建装饰者子类 红色火焰装饰者类

package decorator_package;public class decorator_audi_red extends decorator_parent     @Override    public void print_face()         super print_face();        System out println( 给 奥迪 喷涂鸦   颜色为 红色火焰 );    

  然后再新建装饰者子类 紫色霞光装饰者类

package decorator_package;public class decorator_audi_purple extends decorator_parent     @Override    public void print_face()         super print_face();        System out println( 给 奥迪 喷涂鸦   颜色为 紫色霞光 );    

  新建一个运行类

package main_run;import car_package audi_sub;import decorator_package decorator_audi_purple;import decorator_package decorator_audi_red;public class main_run     public static void main(String[] args)         audi_sub audi_sub_ref = new audi_sub();        audi_sub_ref setMake_address( 北京市朝阳区 );        audi_sub_ref setSpeed( );        decorator_audi_red decorator_audi_red_ref = new decorator_audi_red();        decorator_audi_red_ref setCar_parent_ref(audi_sub_ref);        decorator_audi_purple decorator_audi_purple_ref = new decorator_audi_purple();        decorator_audi_purple_ref setCar_parent_ref(decorator_audi_red_ref);        decorator_audi_purple_ref print_face();    

  程序运行结果如下

audi车默认的颜色为 黑色给 奥迪 喷涂鸦   颜色为 红色火焰给 奥迪 喷涂鸦   颜色为 紫色霞光

  从程序结构中可以看到 完全符合了前面我们的要求 灵活 顺序敏感

  【装饰模式 MyEclipse 项目JAVA代码实现

cha138/Article/program/Java/gj/201311/27520

相关参考

知识大全 设计模式-快餐简解-观察者模式

  【观察者模式应用场景举例】  比如在玩极品飞车这款游戏每一个车手到达终点的时候都会在其它车手的屏幕上显示某某人以多少时间到达终点的提示其实这就是一个典型的观察者模式的应用观察者模式即是典型的双向一

知识大全 设计模式-快餐简解-模板方法模式

  【模板方法模式应用场景举例】  比如在玩极品飞车这款游戏每辆车都有显示速度的仪表盘但有可能A车显示的是蓝色的仪表盘B车显示的是红色的仪表盘分析中可以发现他们都有车速度的值但显示的方式不太一样其实模

知识大全 Java程序性能优化-装饰者模式(1)

Java程序性能优化-装饰者模式(1)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!   

知识大全 Java程序性能优化-装饰者模式(2)

Java程序性能优化-装饰者模式(2)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!   

知识大全 Java程序性能优化-装饰者模式(3)

Java程序性能优化-装饰者模式(3)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!   

知识大全 Java程序性能优化-装饰者模式(4)

Java程序性能优化-装饰者模式(4)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!   

客厅欧式装修有几种形式吊顶装饰?

客厅欧式装修有几种形式吊顶装饰?客厅欧式装修上的吊顶,不仅在选择材料上多加注重,还需要在风格模式上有所了解。不同风格的吊顶模式,不仅材料使用不一样,就连装修出来的效果也不同。客厅欧式装修有几种形式吊顶

知识大全 关于Java23种设计模式的有趣见解[2]

关于Java23种设计模式的有趣见解[2]  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  装饰模

知识大全 使用Decorate模式实现留言版词汇处理

使用Decorate模式实现留言版词汇处理  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!  装饰者

家庭装修吊顶选择装饰材料注意细节

家庭装修吊顶选择装饰材料注意细节优质的金属吊顶不但使吊顶材料在性能上有了极大的飞跃,在装饰外观上也极富变化。普通的平吊顶、独特的弧形设计、色彩缤纷的特殊图形吊顶和异型吊顶,改变了以往吊顶模式化的造型,