前言
小龍同學花費畢生絕學精心學習並製作了自動化測試之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