目录
概念
代理模式: 为其他对象提供一种代理以控制对这个对象的访问。
见名知意
1. 就类似于马云 , 想要购买一份飞机票 ,而这种事完全可以交给代理——秘书去做。
2. 小学的时候 , 有男同学想送给暗恋的女生一朵花,但不好意思,于是交给自己同桌,让其代为自己送给女生那朵花。 这也是代理模式的体现。
UML释义
- Subject
抽象主题角色:可以是抽象类,也可以是接口。抽象主题是一个普通的业务类型,无特殊要求。 - RealSubject
具体主题角色:也叫做被委托角色或被代理角色,是业务逻辑的具体执行者。 - Proxy
代理主题角色:也叫做委托类或代理类。它负责对真实角色的应用,把所有抽象主题类定义的方法限制委托给真实主题角色实现,并且在具体主题角色处理完毕前后做预处理和善后处理工作
代理模式应用
1. 远程代理
为一个对象在不同地址空间提供局部代表。这个可以隐藏一个对象存在于不同地址空间的事实。 eg:nginx
2. 虚拟代理
根据需要创建开销很大的对象。
eg:打开一个网站时 , 我们看到的图片可能全是一摸一样的 , 而点开之后,才开始下载。类似于前端开发中常用的懒加载。
3. 安全代理
用来控制真是对象访问时的权限。
eg :一个后台管理系统中的管理员权限分配。
4. 智能指引
指当调用真实的对象时,代理处理另外一些事。
案例代码
还是以马云买票这件事来说
创建权限接口
public interface Agent {
void quanli();
void run();
}
创建继承类
public class MaYun implements Agent{
@Override
public void quanli() {
System.out.println("行使马云的权力");
}
@Override
public void run() {
System.out.println("runing");
}
}
创建代理类
public class Proxy implements Agent{
Agent agent = null;
// @Override
public Proxy(Agent agent) {
this.agent = agent;
}
@Override
public void quanli() {
agent.quanli();
}
@Override
public void run() {
agent.run();
}
}
结合工厂模式 可以与代理模式相结合
客户端类
public class client {
public static void main(String[] args) {
MaYun maYun = new MaYun();
Proxy proxy = new Proxy(maYun);
proxy.run();
proxy.quanli();
}
}
结束语
代理模式在生活和项目中用的频率算是其他设计模式出现率较高的 , 其面试命中率至少也能排进前五 , 想要通过学习设计模式参加秋招或者春招的同学,可以好好研习一下此模式 。
社招的大佬勿扰。。。