學習更多設計模式請參考:入門設計模式之彙總篇 代理模式;給某個對象提供一個代理對象,由代理對象持有對原對象的引用。 代理模式就比較符合中國人含蓄的性格,假如有個姑娘想要找個對象,但是直接滿大街去喊我要找對象的不是很多吧。大部分的女孩還是傾向於先去找一個媒人,讓媒人來給自己介紹對象。這裡的媒人其實就是 ...
學習更多設計模式請參考:入門設計模式之彙總篇
代理模式;給某個對象提供一個代理對象,由代理對象持有對原對象的引用。
代理模式就比較符合中國人含蓄的性格,假如有個姑娘想要找個對象,但是直接滿大街去喊我要找對象的不是很多吧。大部分的女孩還是傾向於先去找一個媒人,讓媒人來給自己介紹對象。這裡的媒人其實就是女孩的代理對象了。
先來看一下類圖:
我們可以看到女孩跟媒人都實現了一個相親的介面,然後呢媒人持有女孩的引用來調用女孩展示自己的方法,代碼是這樣的:
public interface BlindDate {
public void show();
}
public class Girl implements BlindDate {
@Override
public void show() {
System.out.println("女孩展示自己");
}
}
public class MatchMaker implements BlindDate {
BlindDate bd;
MatchMaker(BlindDate bd){
this.bd=bd;
}
@Override
public void show() {
System.out.println("媒人牽線搭橋");
bd.show();
System.out.println("媒人收取中介費");
}
}
上方這種寫法確實實現了代理模式,但是細心的你可能會發現,這不符合邏輯呀,媒人怎麼能也有show方法呢,她是代理,沒必要搞得跟女孩一樣吧,所以呢又出現了下方的實現方式
代碼實現:
public class DynamicMatchMaker {
private Object girl;
DynamicMatchMaker(Object girl) {
this.girl = girl;
}
public Object getProxy() {
return Proxy.newProxyInstance(
girl.getClass().getClassLoader(),
girl.getClass().getInterfaces(),
new InvocationHandler() {
@Override
public Object invoke(Object proxy, Method method, Object[] args) throws Throwable {
System.out.println("媒人牽線搭橋");
Object returnValue = method.invoke(girl, args);
System.out.println("媒人收取中介費");
return returnValue;
}
});
}
}
這種實現看來其實還是可以的哈,滿符合邏輯的,相當於找媒人獲得了女孩的聯繫方式
本文出自https://zhixiang.org.cn/#/blog/read/5191ebb4-4ca2-44d4-ab74-ee1834ba547c,轉載請保留。