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
}