该系列文章为博主学习笔记,原文请参考参考连接
本文禁止转载,但是欢迎大家留言区留言交流[微笑]
先简单谈一谈自己对代理模式的理解:在客户端和产品类(客户端想要访问的类,我们简称产品类吧)之间创建一个新的类,这个类称之为代理类。通过代理类去访问产品类。
UML:
代码:
比如现在有这么一个需求
public interface Software {
public void Method() throws Exception;
}
public class Proxy implements Software {
private RealSoftware realSoftware = new RealSoftware();
public void BeforeMethod() {
System.out.println(new Date());
}
@Override
public void Method() {
BeforeMethod();
try {
realSoftware.Method();
SuccessMethod();
} catch (Exception e) {
FailMethod();
e.printStackTrace();
}
}
public void SuccessMethod() {
System.out.println("方法Method()调用成功");
}
public void FailMethod() {
System.out.println("方法Method()调用失败");
}
}
public class RealSoftware implements Software {
@Override
public void Method() throws Exception{
System.out.println("方法Method()被调用");
}
}
public class MyClass {
public static void main(String[] args) {
Software software=new Proxy();
try {
software.Method();
} catch (Exception e) {
e.printStackTrace();
}
}
}
输出:
Fri Nov 10 23:07:00 CST 2017
方法Method()被调用
方法Method()调用成功
使用代理模式,可以使客户端完全不用知道产品类的具体实现的细节,只需要知道代理类和需要调用的方法,具体这个方法都干了些什么,客户端不知道,这样降低了耦合。就比如说我想要去中介找房子,我只需要告诉中介我的需求,而我并不用关心中介是通过什么方法帮我找到的房子。
通过在客户端可以通过配置文件去指定具体的代理类,对代理类的更改只需要更改配置文件就行了,符合开闭原则。
微信公众号:
QQ群:580335881