设计模式 之 静态代理模式和装饰模式的区别

文章目录[隐藏]

了解了下代理模式之后发现静态代理模式和装饰模式非常的相似,代理类和被代理的客户实现同一个接口,装饰者和被装饰者也是实现的同一个接口,实现方式也类似(针对接口编程是一个主要设计原则)。搜索之,得到结论:代理模式主要是控制对某个特定对象访问,而装饰模式主要是为了给对象添加行为

所以两类的设计模式的代码还是有一些差别。


静态代理模式

通常自己构造对象,方法中控制对象的访问。

//接口
interface Subject{
	public void doAction();
}
//实现类
class RealSubject implements Subject{
	@Override
	public void doAction() {        
		System.out.println(“do something”);  
	}
	
}
 //代理类
class Proxy implements Subject{
	private Subject subject;
	public Proxy(){
        //关系在编译时确定
		subject = new RealSubject();
	}
	public void doAction(){
        //控制访问
		if()
			subject.doAction();
		else
			…
	}
}

装饰模式

在构造函数中传入被装饰的对象,方法中增强对象的访问。

interface Component{
	public void operate();
}
//具体构件
class ConcreteComponent implements Component{
	public void operate(){
		System.out.print("do somthing");
	}
}
//装饰者
class Decorator implements Component{ 
	private Component component; 
	public Decorator(Component component){ 
//通过构造器传值 
		this.component = component 
	}
	public void operation(){ 
		do something        
		component.operation();
		do Something 
		
	}
}

以上可以看出 , 代理模式主控制,而装饰模式主增强,使用场景还是取决于业务逻辑

voidm

在黑暗中支撑和平的无名者

留下你的评论

*评论支持代码高亮<pre class="prettyprint linenums">代码</pre>

相关推荐