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
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值