对于装饰器模式的理解

之前一直有个疑问,如果采用装饰器模式设计继承树,那客户端在调用的时候如何使用装饰器中的功能?原先理解的是客户端仍然只能查看接口,但接口带来的问题就是:子类添加的个性的方法无法体现在顶层的接口中,从而导致客户端无法使用子类的所有功能。
例如:

public interface A{
	public static A empty(){
		return new A1();
	}
	
	public void a();
}

public A1 implements A{
	public  A1(){}
	
	@Override
	public void a(){}
}

public abstract Decorator implements  A{
	protected A decoratedA;
	
	public Decorator(A a){
		decoratedA = a;
	}
	
	@Override
	public void a(){
		decoratedA.a();
	}
}

public Decorator1 extends Decorator{
	public Decorator1(A a){
		super(a);
	}

	public void b(){};
}

A a = new A1();
A decorator = new Decorator1(a);

此时decorator无法调用b方法
查看网上别人的代码后发现,装饰器模式的装饰应该只真对于自身,而不能被外界使用,即b方法应该被private修饰。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值