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