代理模式

代理模式的定义是:给某一个对象提供一个代理,并有代理对象控制对原对象的应用

代理模式包含 如下角色:

ISubject:抽象主题角色,是一个接口。该接口是对象和它的代理共用的接口

RealSubject:真实的主题角色,是实现抽象主题接口的类

Proxy:代理角色,内部含有对真实对象RealSubject的引用,从而可以操作真实对象。代理对象提供与真实对象相同的接口,以便在任何时刻都能代替真实对象。同时,代理对象可以在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装。


静态代理:

代理模式有几种,虚拟代理,计数代理,动态代理。主要分为两类,静态代理和动态代理。静态代理比较简单,有程序员编写的代理类,并在程序运行前就编译好的,而不是有程序动态产生的。

方式1:聚合式静态代理

public interface Manager{

void doSomething();

}

2.真实主题类

public class Admin implements Manager{

  void domSomething(){

  sysout("Admin do somethis);

}

}

3.以聚合式实现的代理主题

public class AdminPoly implements Manager{

   private Admin admin;

  public AdminPoly(Admin admin){

   super();

  this.admin=admin;

}

void doSomething(){

  syout(Log);

  

}

}

动态代理

一般来说,对代理模式而言,一个主题类与一个代理类一一对应,这也是静态代理模式的特点

但是,也存在这样的情况,有n个主题类,但是代理类中的“前处理、后处理”都是一样的,仅调用主题不同。多个主题类对应一个代理类,共享“前处理,后处理”功能,动态调用所需主题,大大减少了程序规模,就是动态代理的特点。

JDK动态代理:

1.抽象的主题

public interface Moveable{

  void move() throws Exception;

}

2.真实主题

public class Car implements Moveable{

   public void move() throws Exception{

   Thread.sleep();

    sysout("汽车行驶中“”);

}

}

3.事务处理器TimeHandler implements InvocationHandler{

  private Object targetr;

  public TImehandler(object target){

       super();

       this.target=target;

  }

 public Object invoke(Object proxy,Method,Object[] args){

            long startTime=system.CurrentTimeMills();

           Systemout.println("汽车开始行驶“);

           method.invoke(target,args);

  }

}

测试类:

Car car=new Car();

InvocationHandler H=new TimeHandler(car);

class<?> cls=car.getclass();

Moveable m=(moveable)Proxy.newProxyInstance(clas.getclassloader,clas.getInterfaces,h);

h.move();


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值