设计模式之–代理模式
简介:
本篇文章是介绍 23 中设计模式中的结构型设计模式中的
代理模式
.使用的是 Java 代码.
目录:
1.什么是代理模式
定义:
代理模式也被称为委托模式. 它是结构型设计模式的一种. 在现实生活中我们用到类似代理模式的场景有很多, 比如代理上网, 打官司等等.
为其他对象提供一种代理以控制对这个对象的访问.
结构:
- Subject: 抽象主题类
声明真实主题与代理的共同接口方法.
- RealSubject: 真实主题类
代理类所代表的真实主题. 客户端通过代理类间接的调用真实主题类的方法.
- Proxy: 代理类
持有对真实主题类的引用, 在其所实现的接口方法中调用真实主题类相应的接口方法执行.
- Client: 客户端类
调用代理的客户端.
2.代理模式的类型和优点
分类:
从编码角度:
- 静态代理
- 动态代理
从适用范围:
- 远程代理:
为一个对象在不同的地址空间提供局部代表, 这样系统可以将 Service 部分实行隐藏.
- 虚拟代理:
使用一个代理对象表示一个十分耗费资源的对象并在真正需要时才创建.
- 安全代理:
用来控制真实对象访问时的权限. 一般用于真实对象有不同的访问权限时.
- 智能指引:
当调用真实对象时, 代理处理另外一些事, 比如计算机真实对象的引用计数, 当该对象没有引用时, 可以自动释放它; 或者访问一个实际对象时, 检查是否已经能够锁定它, 以确保其他对象不能改变它.
优点:
- 真实的主题类就是实现实际的业务逻辑, 不用关心其他非本职工作.
- 真实主题类随时都会发生变化; 但是因为它实现了公共的接口, 所以代理类不做任何修改也可以使用.
3.代理模式的简单运用
抽象主题类
public interface Subject {
void visit();
}
真实主题类
public class RealSubject implements Subject {
private String name = "byhieg";
@Override
public void visit() {
System.out.println(name);
}
}
代理类
public class ProxySubject implements Subject{
private Subject subject;
public ProxySubject(Subject subject) {
this.subject = subject;
}
@Override
public void visit() {
subject.visit();
}
}
客户端
public class Client {
public static void main(String[] args) {
ProxySubject subject = new ProxySubject(new RealSubject());
subject.visit();
}
}