代理模式和动态代理-CSDN博客
??System.out.println("运行时间为:"+(time2-time1));??   ???   ??super();??   ?代理实现时TanktimeProxy,?   }??实际被代理对象:com.gjy.proxy;?通过调用TanktimeProxy的move()方法我们可以实现对Tank的move()方法的运行时间的计算,   ????

?

?

publ

ic?而不

用在Tank的mov

e()方法中作任何实现,TanklogProxy(move);?客户只与中间商交道,?

?

?

?

  ?

??class??   ?????可以把信委托给邮局,

?

?

  ?   ???

  package?

p

ub

lic?   ?   Java代码?{???move?客户买产品并不直接与生产商交道,?com.gjy.proxy;??{????   ?Java

码?System.out.println("TanK?   moving........");???   ??   ??

例如我们买火车票不一定非要到火车站去买,

?

t?}?TanktimeProxy实现了对Tank的move()方法运行时间的计算,Tank?????   ?我必需再写一个类来实现这一功能:?

?

?

代理主题角:

  ?

package?

????   public?class?TestTank?

?

?TanklogProxy(Moveable??}?????   ?public?

?

void?   public?

?

  com.gjy.proxy;??

?

  ?   ?

?

  

?{??????class?

?

客户这三者这间的关系?

=?

new?Tank();????   ?   ?   ????

?

??   下面我想在TanK的move()方法前后加上日志:Moveable?

main(String[]?

=?new???2

.下面我们来个一个静态代理

的实现。?

?

  ?super();??

  ?

Tank必需实现Moveable接口。

?

t)???move.move();???

?

?

?

????   ??   

??

?

t???

?

  ?=?中间商,}?

?

从上例可以看到代理主题角:

?

  ?Tank都实现了Moveable接口,Java代码?   ??

?

???move()???

?

?package???而代理一般在交互的过程中(交互前后),   ???TanklogProxy??Moveable{?进行某些别的处理。?

?

?

其它类通过访问代理主题角来访问实际被代理角。

?

??   371编辑删除所谓代理,?Moveable?   t;????

Moveable{?

???time2???   我以一个

坦克为例

。   ?

?

?

{?

public??????   

???????

?

?   ??   可以到一些火车票的代售点去买。???????

?

新建一个people人类,?由邮局把信送到目的地。{??this.t??t;???=?????   ?   ????   ??????????package?@Override?Moveable{?

?

?   ????

  ?

?public?

void?

?people类不能拥有车,?

?

?给有需求的人士。??   ???

?

??

move()?

System.out.println("start?品飞车”???

?

?}?String?

?

  

=

??public?

  ?

?t.move();???   ??

  ?

  ?

?

com.gjy.proxy;??在我们生活中处处可见,?   ??System.out.println("end???System.out.println("time2="+time2);?   ??????   ?}?

那么在设计时就要以面向OOP编程的思想来考虑软件的类结构,

}??

测试:

setCash(int?Java代码??package??   ?people;?   ?public?   ?   TestTank?{?args)??????buy_car_imple;import?void???{??????????   ?   

?public????=?new?return?   ??

?

?对一些对象提供代理,??implements??????Moveable?   move?getUsername()?   new?

{?

??   ?buy_car_package;public??这个代理类来考察当前的people是否有资格进行买车:?

?

代理”

?

????m

ovet

?这款游戏,new?   Tank?people??????

?

?}??   ?   ?   ?movet.move();?   Moveable???   people;??它们对Tank的代理顺序是可以交换的。   ??   ??

  ?

?   p

u

blic?   ???   ?{?   ?   }??   }?

move();?

package?

由于TanktimeProxy,

TanklogProxy都实现了Moveable接口,所以TanklogProxy可以代理TanktimeProxy,implements??{???

?

??那么这个卖车的“   车店”就是一个典型的“?的“

time1?

,?提供卖车的服务”?

void?

销售汽车的代理”   也是一个对象,+?在软件项目中这个对象也具有管理财务进销存的基本功能,?这个销售汽车的代理也是一个类了。?

?

比如:???类型:????

?

?

  而中间商就可以对产品进行一些包装,?【代理模式UML图】??????新建一个买车的接口:?package???buy_car_package?{?public??class??   void?int?   ???=?   具有买车的行为,所以实现接口buy_car_package:   ?   package??   buy_car_package.buy_car_package;public?class?people??

?

{?

?

3000)?

}?

private??cash;????

?

?username;??public???int?   ?{?System.currentTimeMillis();??   ??   ????cash;?people)?

?

  

?   }????setPeople(people???cash)???implements????

?

?

this.cash?com.gjy.proxy;?cash;???

?

{??   ?System.out.println(username??String??

{?

????{???return?username;??Proxy模式是很常见的模式,???

  ?

??   void??username)?interface???this.people?????this.username??

u

sername;?   ??   ?   ??class?

?

public?

void?

  buy_car()?public?代理模式和动态代理-CSDN博客代理模式和动态代理原创2013年04月26日17:15:28标签:void???

?

???+?"买了一台新车");??

System.out.println("time1="+time1);?

  ?   }}?{?必须经过proxy代理类的认证,

?

新建一个代理,???buy_car_imple;import?buy_car_package.buy_car_package;public?

Moveable?

  proxy_buy_car_imple??buy_car_package?????

  private?

people?

people;?

??   ?public??   getPeople()?????????return?是指具有

与代

理元(被代理的对象)具有相同的接口的类,{???}????public?{??Moveable?   {?   ?????   ???=??

?

1.代理:一个角代表别一个角来完成某些定的功能。?}??   ??public?void?

buy_car()?

??

  ?

??@Override?   ??if?(people.getCash()?   >??private???   Tank??TanktimeProxy(t);????   private?Tank??System.out.println(people.getUsername()??"花"?+?   peo梓潼代办公司 }??{???

?

也不用知道产品是如何产生的,?

t;?

??System.currentTimeMillis();??

?

?

??

?

args)?

?

?

???   void?long???   ?   ?move......");?????   static?????   ?

?

?

为汽车厂家“?=??

?

????

?

??

?

  ?????   以限制那些对象去访问其它对象。??比如在玩“??测试:那么这个对象也具有一定的状态,???getCash()?

抽象主题角:

?

?

?   ?从面向对象的方面考虑,   ?   ??{?

?

???   

?

?

????汽车厂家”?@Override?imp

le

ments???this.t??public?Moveable?Java代码?

  ?

?

?

?   private??t)?????t;??=?public?????buy_car();}?这样我通过代理在Tank的move()方法前后加入了日志和时间统计的功能,???

?

???

void?

?   ?

?

?TanktimeProxy???????

}?

【代理模式解释】??

interface?

move()??

package?

Java代码?   寄信不一定是自己去寄,?过来也可以,?

?

???生产商,??   ???

?

?

?   TanktimeProxy(t);?static????【代理模式-JAVA代码实现】???

代理模式有三个角:1.抽象主题角2.代理主题角3.实际被代理角?

??

  main(String[]?

提供一些售后的服务。   ??class??}????

?

结构模式???=???????

?

??

public?

?blic??   ?   而TanktimeProxy,?implements????void???

?

move........");?   ?

?

符合条件之后才可以拥有车辆,   如果游戏者手中的金钱达到了一定的数量就可以到车店买一部能更高的赛车,?

?

客户端必须通过代理与被代理的目标类交互,??   buy_car_package?=?t.move();?

}?

??TanktimeProxy?TanktimeProxy(Moveable?long?com.gjy.proxy;??setUsername(String?

?

???Tank();?????????

?

这就是代理的作用。
友情链接: 自助添加