1、装饰器模式:
(1)抽象组件:需要装饰的抽象接口对象(接口或抽象父类)
(2)具体组件:需要装饰的对象
(3)抽象装饰类:包含了对抽象组件的引用以及装饰着共有的方法
(4)具体装饰类:被装饰的对象
2、例子解释:实现放大放大声音
(1)定义抽象组件:声音接口(Voice)实现声音方法voice()
(2)定义具体组件:一个人声音类(People)继承音接口(Voice)
(3)定义抽象装饰类:一个抽象放大声音类(Ampl)。继承声音接口(Voice),在自身构造方法中传入Voice类型对象参数
(4)定义具体装饰类:放大声音20分贝类(Ampl_20)在放大器类。在自身构造方法中传入Voice类型对象参数,并修改放大特定分贝声音
(5)调用:Ampl_20(people).voice();
3、代码:
//抽象组件
interface Voice {
int voice();//声音分贝大小
}
//具体组件
class People implements Voice{
public int myvoice = 50;
public int voice() {
System.out.println("人的声音大小"+ myvoice +"分贝");
return myvoice;
}
}
//抽象装饰类
abstract class Ampl implements Voice {
//对抽象组件的引用
public Voice voice;
public Ampl(Voice voice) {
this.voice = voice;
}
public int voice() {
return this.voice.voice();
}
}
//具体装饰类
class Ampl_20 extends Ampl{
public Ampl_20(Voice voice) {
super(voice);
}
public int voice() {
int nowVoice = this.voice.voice()+20;
System.out.println("增加20分贝后,人的声音大小"+ nowVoice +"分贝");
return nowVoice;
}
}
//调用
public static void main(String[] args) {
Voice people = new People();//==>50
Ampl_20 ampl = new Ampl_20(people);
ampl.voice();//==>70
Ampl_20 ampl2 = new Ampl_20(ampl);
ampl2.voice();//==>90
}