对于装饰器模式的理解

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修饰。

以上是关于对于装饰器模式的理解的主要内容,如果未能解决你的问题,请参考以下文章

对于装饰器模式的理解

对于python装饰器结合递归的进一步理解

结构型模式————装饰器模式(3.1)

python装饰器三种装饰模式的简单理解

设计模式之装饰器模式

python使用上下文对代码片段进行计时,非装饰器