装饰者设计模式与静态代理设计模式的对比

相同点:

(1) 装饰者类与代理类都需要实现目标类所实现的接口

(2) 装饰者类与代理类中都需要声明目标类对象,目的是这些类中都需要调用目标对象的目标方法

(3) 装饰者类与代理类都可以在不改变目标类的前提下对目标对象进行增强

不同点:

(1) 目的不同:装饰者类的目的就是为了增强目标类;静态代理类的目的是为了保护和隐藏目标对象。

(2) 装饰者类与代理类中都需要声明目标类对象,但对于目标对象的创建方式不同。装饰者类是由带参构造器传入的;代理类中的目标对象,是在无参构造器中直接创建的。

(3) 测试类中,装饰者模式,需要先创建一个目标类对象,再将其通过带参构造器传给装饰者类;代理模式,测试类直接创建代理类对象,测试类根本就看不到业务接口的真正的实现类是谁。

(4) 装饰者类一般不具体增强目标类,而是由具体的装饰者子类进行的增强,并且可以形成“装饰者链”;静态代理类,则是具体的增强的实现,所有的增强功能,一般都是在静态代理类中完成的。

时间: 2024-10-07 04:24:12

装饰者设计模式与静态代理设计模式的对比的相关文章

用过滤器和装饰者设计模式(静态代理)解决getParameter乱码问题

post的乱码问题比较好解决,这里主要是对get请求的乱码做处理 解决思路:增强request对象的getParameter方法,使之 getParameter  直接获取到的就是解决乱码后的数据 有四种方式, 1.继承 :(下下策) ①明确知道全类名 可以打印request实现类,可以知道实现类的全类名 ②就是可以在子类中 new 父类 你能确定request实现类,一定可以new么? 确定自己写出的是通用方法.tomcat,weblogic,jboss...... 缺点: ①很难实现,几乎没

28 多线程(二)——静态代理设计模式

引入 在前一节我们学习了实现Runnable接口创建线程,其中提到只使用一次对象时使用匿名对象,如: new Thread(new xxx().start();//xxx为实现了Runnable的类 Thread就是一个静态代理,使用了这种方法,xxx类无需继承Thread类,就可以通过Thread类创建一个线程. Thread就和装饰类的作用相似,都是包装一个对象. 那么,静态代理设计模式的特点就是: 代理者与被代理者都继承同一个接口(Thread与xxx继承的是Runnable接口) 代理者

静态代理设计模式(StaticProxy)

静态代理设计模式: 要求:真实角色,代理角色:真实角色和代理角色要实现同一个接口,代理角色要持有真实角色的引用. 在Java中线程的设计就使用了静态代理设计模式,其中自定义线程类实现Runable接口,Thread类也实现了Runalbe接口,在创建子线程的时候,传入了自定义线程类的引用,再通过调用start()方法,调用自定义线程对象的run()方法.实现了线程的并发执行. 1 public class Test2 { 2 3 public static void main(String[]

设计模式之静态代理模式

举个栗子: 比如你结婚,婚庆公司帮你代理一些事情(布置婚房,准备午餐等),虽然婚前公司做的,但是是为你而做的 静态代理的设计模式的三要素: 1.真实角色 2.代理角色:代理角色需要具有真实角色的引用,这样才能实现对真实角色的代理 3.真实角色和代理角色要实现共同的接口 看个样例: Staticproxy.java package 设计模式; /** * @author:yb * @version 创建时间:2018-12-24 下午4:48:03 类说明 */ /* * 静态代理 设计模式 *

设计模式之静态代理

一 什么是代理 代理(Proxy) 它是一种设计模式,提供了对目标对象另外的访问,即通过代理对象访问目标对象.这样做的好处就是可以在不改变目标对象实现前题下,增加额外的功能,即对目标对象的功能做扩展. 举个例子:我们需要在一个方法的执行前和执行后添加日志记录功能,在不使用代理时,我们的方法调用如下 此时,我们就需要修改当前的实现方法,不符合我们添加业务方法时不破换原有方法(目标对象)的设计思想.使用代理后,我们的方法调用如下 这个时候,我们调用的时代理对象,这时我们就只需要在在代理类中添加我们的

设计模式之--静态代理及动态代理模式

原文链接:http://www.studyshare.cn/blog/details/1181/0 一.概念 代理模式:为其他对象提供一种代理类用以控制对这个对象的访问.在某些情况下,一个对象不适合或者不能直接引用 另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用,代理模式属于23中设计模式中的结构型设计模式. 代理模式可分为静态代理和动态代理. 代理结构如下图: 例如:客户(客户类)—>代购(代理类)—>海外下单(海外订单类),普通客户无法直接去海外下单,则向代购公司 下单,代

代理设计模式之静态代理与动态代理(超..)详解

在学习Spring框架的时候,有一个重要的思想就是AOP,面向切面编程,利用AOP的思想结合Spring的一些API可以实现核心业务与辅助业务的分离,即可以在执行核心业务时,将一些辅助的业务加进来,而辅助业务(如日志,权限控制等)一般是一些公共业务,这样就实现了两者的分离,使得核心业务的代码更加纯粹,而且辅助业务也能得到复用,这一篇笔记是当时学习spring的时候写的,使用springAPI以及自定义类 实现AOP的一个例子 ,.AOP底层就是通过动态代理来实现的,最近专门学习了一下代理模式,反

GOF23设计模式之静态代理模式实现之经典

 /**  * 抽象就角色,定义代理角色和真实角色的公共对外方法  * 时间:2015年4月4日18:45:00  * 在这个例子中,抽象角色起着规范代理角色和真实角色的作用.  * 其中具有方法,面谈,签合同收预付款,预订机票,唱歌,收尾款  */ package com.bjsxt.cn.proxy.staticProxy; public interface Star {  void confer();  void signContract();  void bookTicket();

浅谈-Java设计模式之静态代理

代理模式(Proxy pattern):当一个对象不想或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用.静态代理是具体去实现需要代理对象接口,覆写方法时进行个性化操作. 单独为代理而实现作为某个接口实现类的则为静态代理(Static Proxy). 不多说了,上代码? package com.ant; public interface Hello { public void say(); } package com.ant; public class HelloIm