前言
小龙同学花费毕生绝学精心学习并制作了自动化测试之selenium ,但预定分享时间时,小龙龙同学胆怯了,于是大哥小强出马,帮他完成预定分享时间的工作
代理模式
为其他对象(小龙)提供一个代理(小强)以控制对这个对象的访问. 类图如下:
优点:
- 职责清晰。
- 高扩展性。
- 智能化。
缺点:
- 由于在客户端和真实主题之间增加了代理对象,因此有些类型的代理模式可能会造成请求的处理速度变慢。
- 实现代理模式需要额外的工作,有些代理模式的实现非常复杂。
使用场景:按职责来划分,通常有以下使用场景:
- 远程代理。
- 虚拟代理。
- Copy-on-Write 代理。
- 保护(Protect or Access)代理。
- Cache代理。
- 防火墙(Firewall)代理。
- 同步化(Synchronization)代理。
- 智能引用(Smart Reference)代理。
预定分享时间的职能
package com.jack.idea.test.designmode;
/**
* 代理模式
*
* @author ljs.song
* @date 2017-12-28 18:50
*/
public class Proxy {
public static void main(String[] args) {
接下来小强代理小龙去跟磊磊等抢分享时间
Xiaoqiang xiaoqiang = new Xiaoqiang(new Xiaolong());
//磊磊说4点他要分享
xiaoqiang.reserveTime(4);
System.out.println("----------------");
//磊磊被上述大哥打败,改成说他要5点分享
xiaoqiang.reserveTime(5);
}
}
//分享者
interface Sharer{
/**
* 预定时间 大家都来报出一些时间抢
*/
void reserveTime(int time);
}
/**
* 小龙内心知道自己想周四分享,但是怕有别人抢时间,不敢开口
*/
class Xiaolong implements Sharer{
@Override
public void reserveTime(int time) {
System.out.println( "我想周四 " time " 点开始分享");
}
}
/**
* 老大哥小强出马帮其抵挡一切入侵者
*/
class Xiaoqiang implements Sharer{
private Sharer sharer;
public Xiaoqiang(Sharer sharer) {
this.sharer = sharer;
}
@Override
public void reserveTime(int time) {
//这里表示这个代理能帮他全权做出一些反馈,不仅仅是调用被代理者的职能
if(time == 4){
System.out.println("我不管,只能小龙在这个点分享");
}else{
this.sharer.reserveTime(time);
}
}
}
转载请注明出处 https://blog.csdn.net/abudexiatian