JAVA设计模式之------代理模式

代理模式
============================================
1.简介
代理模式(Proxy Pattern)是GoF 23种Java常用设计模式之一。
代理模式的定义:为其他对象提供一种代理以控制对这个对象的访问。
使用代理模式创建代理对象,让代理对象控制目标对象的访问
(目标对象可以是远程的对象、创建开销大的对象或需要安全控制的对象),
并且可以在不改变目标对象的情况下添加一些额外的功能。

2.UML图

3.模式中包含的角色及其职责
Subject:
抽象主题角色,抽象主题类可以是抽象类,也可以是接口,是一个最普通的业务类型定义,无特殊要求。
RealSubject:具体主题角色,也叫被委托角色、被代理角色。是业务逻辑的具体执行者。

Proxy:代理主题角色,也叫委托类、代理类。它把所有抽象主题类定义的方法给具体主题角色实现,

            并且在具体主题角色处理完毕前后做预处理和善后工作。(最简单的比如打印日志)


4.代码实现
(1)Subject

/**
 * 抽象主题,定义主要功能
 */
public interface Subject {
   public void operate();
}

(2)RealSubject
/**
 * 具体主题
 */
public class RealSubject implements Subject {
   @Override
   public void operate() {
        System.out.println("real subject operate started......");
   }
}

(3)Proxy
/**
 * 代理类
 */
public class Proxy implements Subject{
   private RealSubject realSubject;
 
   @Override
   publicvoid operate() {
    if(realSubject == null){
        realSubject = new RealSubject();
    }
        System.out.println("before operate......");
        realSubject.operate();
        System.out.println("after operate......");
   }
}

(4)Client
/**
 * 客户端
 */
public class Client {
   /**
    * @param args
    */
   public static void main(String[] args) {
        Proxy proxy = new Proxy();
        proxy.operate();
   }
}

5.应用场景
现实世界中,秘书就相当于一个代理,老板开会,那么通知员工开会时间、布置会场、会后整理会场等等开会相关工作就可以交给秘书做,老板就只需要开会就行了,不需要亲自做那些事。同理,在我们程序设计中也可使用代理模式来将由一系列无关逻辑组合在一起的代码进行解耦合,比如业务代码中的日志代码就可以在代理中进行。Spring的AOP就是典型的动态代理应用。

6.代理模式的应用形式
(1)远程代理

也就是为一个对象在不同的地址空间提供局部代表。
这样可以隐藏一个对象存在于不同地址空间的事实。
webservice的应用。
(2)虚拟代理
根据需要创建开销很大的对象。
通过它来存放实例化需要很长时间的真实对象。
比如说打开一个很大的HTML网页时,里面可能有很多的文字和图片,但你还是可以很快打开它,此时你所看到的是所有的文字,但图片却是一张一张地下载后才能看到。那些未打开的图片框,就是通过虚拟代理来替代了真实的图片,此时代理存储了真实图片的路径和尺寸。
(3)安全代理
是指当调用真实对象时,代理处理另外一些事。
比如计算真实对象的引用次数,这样当该对象没有引用时,可以自动释放它;
或当第一次引用一个持久对象时,将它装入内存;
或在访问一个实际对象前,检查是否已经锁住它,以确保其他对象不能改变它。
它们都是通过代理在访问一个对象时附加一些内务处理。

参考:
http://blog.csdn.net/jackiehff/article/details/8621517
程杰<<大话设计模式>>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值