Java模式之装饰者模式&代理模式 装饰模式与代理模式区别

原创 2015年03月16日 21:12:59
1.2.2 装饰模式:就是可以动态的在目标对象中添加一些功能,有装饰者,有被装饰者。 其实它跟代理模式特别像。
              例子:可以把它理解为Spring的AOP,可以通过方法执行前进行装饰增加一些新功能
              装饰器模式的应用场景:
              1、需要扩展一个类的功能。
              2、动态的为一个对象增加功能,而且还能动态撤销。(继承不能做到这一点,继承的功能是静态的,不能动态增删。)
              缺点:产生过多相似的对象,不易排错!
1.2.3 代理模式:在目标对象执行的过程当中增加一个代理对象,也就是说在目标对象在想完成某一件事事情的时候,有一个代理者来帮他完成,而且还可以额外提供一些帮助介绍。
              它与装饰模式很想。
              例子:可以把它理解为Spring的AOP,可以通过方法执行前进行装饰增加一些新功能;它的代码几乎与装饰模式一样
              装饰模式:以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案;它是在运行的时候才知道目标对象(也就是被装饰的对象)

              代理模式:给一个对象提供一个代理对象,并有代理对象来控制对原有对象的引用;它在编译的时候就清楚知道所需要代理的对象


代理模式

package com.sj.proxy;

public class Target implements ITarget{

    @Override
    public void method1() {
        System.out.println("这里是目标对象执行的方法");
    }

    
}
被代理类(目标类)

package com.sj.proxy;

public class Target implements ITarget{

	@Override
	public void method1() {
		System.out.println("这里是目标对象执行的方法");
	}

	
}
代理类
package com.sj.proxy;

public class Proxy implements ITarget {

	ITarget target;

	public Proxy() {

		this.target = new Target();

	}

	@Override
	public void method1() {
		this.before();
		target.method1();
		this.after();
	}

	public void before() {
		System.out.println("before target method");
	}

	public void after() {
		System.out.println("after target method");
	}

}

测试类

package com.sj.proxy;

public class Test {

	public static void main(String[] args) {

		ITarget proxy = new Proxy();
		proxy.method1();

	}

}

装饰模式:

package com.sj.decorator;

public interface ISource {

	public void work();
	
}

被装饰者

package com.sj.decorator;

public class ListView implements ISource {

	@Override
	public void work() {
		System.out.println("this is list view work function");
	}

}

装饰者

package com.sj.decorator;

public class ListViewExt implements ISource {

	private ISource listview;

	public ListViewExt(ISource listview) {
		this.listview = listview;
	}

	@Override
	public void work() {

		System.out.println("这里可以编写动态装饰的内容");

		listview.work();

		System.out.println("这里可以编写目标对象执行后装饰内容");

	}

}

测试类

package com.sj.decorator;

public class Test {
	public static void main(String[] args) {

		ISource listview2 = new ListViewExt(new ListView());
		listview2.work();

	}

}


以上两个模式的代理结构几乎一样,区别就在语义理解上;一个是增强,一个是控制

装饰模式:以对客户端透明的方式扩展对象的功能,是继承关系的一个替代方案;它是在运行的时候才知道目标对象(也就是被装饰的对象)
代理模式:给一个对象提供一个代理对象,并有代理对象来控制对原有对象的引用;它在编译的时候就清楚知道所需要代理的对象


菜鸟版JAVA设计模式—适配器模式,装饰模式,代理模式异同

节前把3个设计模式的学习心得分享了一下,分别是适配器模式,装饰模式,代理模式。 但是似乎越写越有些迷糊,这三种模式都有着一些大同小异的地方,总是有些搞不清。 今天再重新学习下,把学习心得分享给大家一下...
  • lulei9876
  • lulei9876
  • 2014年10月14日 10:55
  • 12323

装饰者模式,代理模式与适配器模式的比较

装饰者与适配者模式的区别 1.关于新职责:适配器也可以在转换时增加新的职责,但主要目的不在此。装饰者模式主要是给被装饰者增加新职责的。 2.关于原接口:适配器模式是用新接口来调用原接口,原接口...
  • scyatcs
  • scyatcs
  • 2014年10月30日 12:48
  • 3791

装饰者模式(附与代理模式的区别,乍看挺像)

一.装饰模式介绍 装饰模式也称为包装模式,结构设计模式之一,就像房子一个,房子盖好都是毛坯房,但是装修之后,有简单装修,精装修,豪华装修,各有不同,这个就可以理解为装饰模式,不管你怎么装修,最开始都是...
  • u011889786
  • u011889786
  • 2016年05月31日 22:49
  • 1033

装饰模式、装饰器模式、代理模式、外观模式区别

装饰器模式关注于在一个对象上动态的添加方法,然而代理模式关注于控制对对象的访问。 用代理模式,代理类可以对它的客户隐藏一个对象的具体信息。因此,当使用代理模式的时候,我们常常在一个代理类中创建一个对象...
  • zhang31jian
  • zhang31jian
  • 2016年01月18日 17:21
  • 2386

装饰器模式、代理模式、适配器模式和外观模式的联系与区别

代理模式VS外观模式VS适配器模式 这三个模式的相同之处是,它们都作用于用户与真实被使用的类或系统之间,作一个中间层,起到了让用户间接地调用真实的类的作用。 简单扣扣字眼 装饰器模式:能动态的新...
  • hp910315
  • hp910315
  • 2016年04月10日 11:24
  • 2723

代理模式和装饰模式的差别

学了代理模式之后发现代理模式和装饰模式非常的相似,代理类和被代理的客户实现同一个接口,装饰者和被装饰者也是实现的同一个接口,实现方式也类似。搜索之,得到结论:代理模式主要是控制对某个特定对象访问,而装...
  • chenchaofuck1
  • chenchaofuck1
  • 2016年03月31日 21:51
  • 1196

java设计模式之装饰模式代理模式区别

初次看装饰模式的时候首先想到了上节讲的代理模式,代理模式与装饰者模式看起来很像,都实现基础对象实现的接口,在其自身对象中都保存着对被代理/被装饰者的对象引用。 各用一句话描述两个模式应该是这样的: 装...
  • crazy_meng
  • crazy_meng
  • 2016年04月13日 15:33
  • 1525

设计模式之装饰模式和代理模式区别与联系

一.你在一个地方写装饰,大家就知道这是在增加功能,你写代理,大家就知道是在限制      1.最常见的代理就是权限判断了,权限就肯定是限制了      2.装饰模式是指增强被包装对象的功能   ...
  • sky_100
  • sky_100
  • 2016年09月13日 17:32
  • 10159

设计模式--装饰者模式与代理模式

这次主要总结下装饰着模式和代理模式,这两个一起进行总结,主要是因为两个设计模式特别的类似。先依次说一下两个设计模式,然后再说下两个模式的不同。...
  • u013159433
  • u013159433
  • 2016年05月25日 17:11
  • 915

继承,装饰者模式和动态代理之间的区别

* 继承 被增强的对象固定的 增强的内容也是固定的 * 装饰者模式 被增强的对象是可以切换的 增强的内容是固定的 还有一种更加灵活的方式,面向切面编程(AOP) ,比装饰者模式更加灵...
  • qq_32101859
  • qq_32101859
  • 2016年02月24日 21:14
  • 2600
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Java模式之装饰者模式&代理模式 装饰模式与代理模式区别
举报原因:
原因补充:

(最多只允许输入30个字)