java设计模式9:Proxy

代理模式也是一种通信接间化的一种思想体现。同样有这种思想的还有适配器模式和装饰模式。
1、类适配器和对象适配器模式简图
$XH6~TZ$L{M9A{}MX`[WFITjava设计模式9:Proxy
2、装饰模式简图
X3LZF81A]S2XQN9K4%KL46L$XH6~TZ$L{M9A{}MX`[WFITjava设计模式9:Proxy
3、所谓代理,就是一个人或者一个机构代表另一个人或者另一个机构采取行动。在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。简略图如下:
imageX3LZF81A]S2XQN9K4%KL46L$XH6~TZ$L{M9A{}MX`[WFITjava设计模式9:Proxy
远程代理
虚拟代理
Copy-on-Write代理
保护代理
Cache代理
防火墙代理
同步化代理
智能引用代理
代理模式的结构
1、抽象主体:声明了真实主体和代理主体的共同接口,这样一来在任何可以使用真实主体的地方都可以使用代理主题。
2、代理主体:代理主体角色内部含有对真实主体的引用,从而可以在任何时候操作真实主体对象;代理主体角色提供一个与真实主体角色相同的接口。以便可以在任何时候都可以替代真实主体;控制对真实主体的引用,负责在需要的时候创建真实主体对象(和删除真实主体对象);代理角色通常在将客户端调用传递给真实的主体之前或之后,都要执行某个操作,而不是单纯地将调用传递给真实主体对象。
3、真实主体:定义了代理角色所代表的真实对象。 示意性实现:
imageimageX3LZF81A]S2XQN9K4%KL46L$XH6~TZ$L{M9A{}MX`[WFITjava设计模式9:Proxy
package com.javapatterns.proxy;
 
public class Client
{
private static Subject subject;
 
static public void main(String[] args)
{
subject = new ProxySubject();
subject.request();
}
}
 
 
package com.javapatterns.proxy;
 
abstract public class Subject
{
abstract public void request();
}
 
 
package com.javapatterns.proxy;
 
public class RealSubject extends Subject
{
public RealSubject()
{
}
public void request()
{
System.out.println("From real subject.");
}
}
 
 
package com.javapatterns.proxy;
 
public class ProxySubject extends Subject
{
/**
* @uml.property name="realSubject"
* @uml.associationEnd
*/
private RealSubject realSubject;
public ProxySubject()
{
}
public void request()
{
preRequest();
 
if( realSubject == null )
{
realSubject = new RealSubject();
}
 
realSubject.request();
 
postRequest();
}
 
private void preRequest()
{
//something you want to do before requesting
}
 
private void postRequest()
{
//something you want to do after requesting
}
}
 
Tags: 

延伸阅读

最新评论

发表评论