Java裝飾器模式(基本構成,非代碼例子,代碼舉例)

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
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章