本篇内容介绍了“java的装饰者模式是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
动态地给一个对象添加额外的职责。
装饰者模式的基本结构如下:

定义一个对象接口,可以给这些对象动态地添加职责。
装饰角色,持有一个Component对象的实例,并定义一个与Componnet接口一致的接口。
二、装饰者模式示例
西游记中的孙悟空,具有七十二般变化,给我们留下了深刻的印象,他的每一种变化都给他带来了一种新的本领。他变成鱼儿时,就可以到水里游泳;他变成雀儿,就可以在天上飞行。下面我们就以齐天大圣的例子来完成一个装饰者模式的例子:
package com.wangmengjun.tutorial.designpattern.decorator;
public interface TheGreatestSage {
void move();}
package com.wangmengjun.tutorial.designpattern.decorator;
public class Change implements TheGreatestSage {
private TheGreatestSage sage; public Change(TheGreatestSage sage) { this.sage = sage; }
public void move() { sage.move(); }
}
package com.wangmengjun.tutorial.designpattern.decorator;
public class Monkey implements TheGreatestSage {
public void move() { System.out.println("Monkey move~~"); }
}
package com.wangmengjun.tutorial.designpattern.decorator;
public class Bird extends Change {
public Bird(TheGreatestSage sage) { super(sage); }
@Override public void move() { System.out.println("Bird move~~"); }}
package com.wangmengjun.tutorial.designpattern.decorator;
public class Fish extends Change {
public Fish(TheGreatestSage sage) { super(sage); }
@Override public void move() { System.out.println("Fish move~~"); }}
package com.wangmengjun.tutorial.designpattern.decorator;
public class Client { public static void main(String[] args) { TheGreatestSage sage = new Monkey(); /** * 单层封装 */ TheGreatestSage bird = new Bird(sage); //bird.move(); TheGreatestSage fish = new Fish(bird); //fish.move(); /** * 多层封装 */ TheGreatestSage fish3 = new Fish(new Bird(sage)); fish3.move(); }
}

这种方式是否似曾相识 ?
大家回忆一下JDK中的io流的创建方式是否也是如此。一个InpuStream的简单结构如下:

new BufferedReader(new FileReader("F:\\test.txt"));
三、小结
3.1 适用场景
3.2 优点 vs 缺点
优点
装饰模式与继承关系的目的都是扩展对象的功能,但是装饰模式可以提供比继承更多的灵活性。装饰模式允许系统动态地决定“贴上”一个需要的“装饰”,或者去除一个不需要的“装饰”。而继承关系则不同,继承关系是静态的,它在系统运行前就决定了,运行时是不能改变的。
装饰者模式不试图在一个复杂的可定制的类中支持所有可预见的特性。相反你可以定义一个简单的类,并且使用Decorator类给它逐渐的添加功能。可以从一个简单的部件组合出复杂的功能。可以创造出出很多不同行为的组合。
缺点
“java的装饰者模式是什么”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注天达云网站,小编将为大家输出更多高质量的实用文章!