对于装饰器模式的理解
Posted 匿名甩尸
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对于装饰器模式的理解相关的知识,希望对你有一定的参考价值。
之前一直有个疑问,如果采用装饰器模式设计继承树,那客户端在调用的时候如何使用装饰器中的功能?原先理解的是客户端仍然只能查看接口,但接口带来的问题就是:子类添加的个性的方法无法体现在顶层的接口中,从而导致客户端无法使用子类的所有功能。
例如:
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修饰。
以上是关于对于装饰器模式的理解的主要内容,如果未能解决你的问题,请参考以下文章