您的位置:首页 > 编程语言 > Java开发

Java代理模式及应用(一)代理模式介绍

2017-09-17 18:37 274 查看

1. 什么是代理模式

提供了对目标对象另外的访问方式;即通过代理对象访问目标对象,这样做的好处是:可以在目标对象实现的基础上,增强额外的功能操作,即扩展目标对象的功能。

代理模式的作用是:为其他对象提供一种代理以控制对这个对象的访问。

这里使用到编程中的一个思想:不要随意去修改别人已经写好的代码或者方法,如果需改修改,可以通过代理的方式来扩展该方法

我们可以通过下面两个图来大概了解下代理模式:

目标对象:肉块,Client客户端直接吃肉块。



代理模式:汉堡,在肉块外面包了蔬菜、面饼,Client客户端直接吃汉堡,间接吃了肉块。当然,吃汉堡肯定比吃肉块更可口!



2. 代理模式

下面我们来了解下代理模式的类图:



代理模式分为以下角色:

抽象角色(Subject)(规定为食物):声明真实对象和代理对象的共同接口。

代理角色(Proxy)(汉堡包):代理对象角色内部含有对真实对象的引用,从而可以操作真实对象,同时代理对象提供与真实对象相同的接口以便在任何时刻都能够代替真实对象。

同时,代理对象可以在执行真实对象操作时,附加其他的操作,相当于对真实对象进行封装。

真实角色(RealSubject)(肉块):代理角色所代表的真实对象,是我们最终要引用的对象。

3. 代理模式代码实现

代码结构如下:

Clinet:客户端调用

ISubject:抽象角色

RealSubject:继承ISubject,真实角色

ProxySubject:继承ISubject,代理角色



Clinet.java

public class Client {
public static void main(String[] args)
{
new ProxySubject(new RealSubject()).request();
}
}


ISubject.java

public interface ISubject {
public void request();
}


ProxySubject.java

public class ProxySubject implements ISubject{
//代理角色对象内部含有对真实对象的引用
private ISubject realSubject;

public ProxySubject(ISubject realSubject){
this.realSubject = realSubject;
}

@Override
public void request()
{
//真实角色所完成的事情
realSubject.request();
//在真实角色操作之后所附加的操作
log(realSubject.getClass().getName());
}

private void log(String className)
{
System.out.println("代理AOP切入--打印log--"+className);
}
}


RealSubject.java

public class RealSubject implements ISubject {
@Override
public void request() {
System.out.println("From Real Subject1!");
}
}


运行结果:

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息