前言
在移動(dòng)開(kāi)發(fā)行業(yè)中,每隔一段時(shí)間都會(huì)出現(xiàn)新的技術(shù),很多人都會(huì)感嘆跟不上新技術(shù)噩翠,對(duì)于這個(gè)問(wèn)題,小Y個(gè)人覺(jué)得,抓不變應(yīng)對(duì)萬(wàn)變才是制勝之道邦投,良好的編程習(xí)慣和優(yōu)秀的設(shè)計(jì)模式永遠(yuǎn)不會(huì)過(guò)時(shí)伤锚,因此小Y把代理模式作為開(kāi)啟設(shè)計(jì)模式以及程序猿修養(yǎng)之路的開(kāi)篇之作。
代理模式定義
為其他對(duì)象提供一種代理以控制對(duì)這個(gè)對(duì)象的訪問(wèn)志衣。
角色介紹
-
Subject抽象主題角色
抽象主題類可以是抽象類也可以是接口屯援,是一個(gè)最普通的業(yè)務(wù)類型定義,無(wú)特殊要求念脯。 -
RealSubject具體主題角色
也叫做被委托角色狞洋、被代理角色。是業(yè)務(wù)邏輯的具體執(zhí)行者绿店。 -
Proxy代理主題角色
把所有抽象主題類定義的方法限制委托給真實(shí)主題角色實(shí)現(xiàn)吉懊,并且在真實(shí)主題角色處理完畢前后做預(yù)處理和善后處理工作,Proxy和具體主題都是去實(shí)現(xiàn)抽象主題惯吕。
案例
看完上面的一些定義式介紹惕它,小Y相信很多小伙伴對(duì)這些理論性的東西不太感冒,覺(jué)得還不如簡(jiǎn)單粗暴通過(guò)實(shí)例講解實(shí)際點(diǎn)废登,確實(shí)如此淹魄,但是小Y個(gè)人覺(jué)得理論性的東西能夠輔助大家更好地去理解實(shí)例。哎呀堡距,尼瑪甲锡,小Y廢話太多,還是趕緊進(jìn)入主題吧羽戒。
1.故事描述
面對(duì)著這種代碼高危職業(yè)缤沦,小Y果斷決定棄碼從商,經(jīng)過(guò)一番東拼西湊易稠,終于成功在淘寶網(wǎng)上開(kāi)起了“小Y雜貨店”缸废,店里的貨物每次都要親身去進(jìn)貨出貨,對(duì)于懶惰的小Y來(lái)說(shuō)簡(jiǎn)直就是虐待啊,因此這種經(jīng)營(yíng)方式果斷拋棄企量。聰明的立馬小Y想到了和線下的實(shí)體店合作测萎,把賣鞋子的、賣衣服的商品店鋪統(tǒng)統(tǒng)放到“小Y雜貨店“”上面届巩,小Y接到訂單再把訂單下發(fā)到所屬實(shí)體店發(fā)貨硅瞧,小Y就可以輕松地賺到商品差價(jià)(小Y此刻正在意淫著未來(lái)的白富帥生活),啊哈哈哈恕汇。腕唧。。瘾英。枣接。。
2.故事簡(jiǎn)化-神奇的UML
3.代碼實(shí)現(xiàn)
//商家接口
public interface IShop {
//貨物訂單
public void sale(String order);
}
// 賣鞋子的實(shí)體店
public class ShoesShop implements IShop{
public void sale(String order){
System.out.println(order+"在Shopes店購(gòu)買成功");
}
}
// 賣衣服的實(shí)體店
public class ClothesShop implements IShop{
public void sale(String order){
System.out.println(order+"在Clothes店購(gòu)買成功");
}
}
//“小Y雜貨店”代理銷售
public class SmallYShopProxy implements IShop {
private IShop _shop = null;
//通過(guò)構(gòu)造函數(shù)傳遞要對(duì)誰(shuí)進(jìn)行代售
public SmallYShopProxy(IShop _shop){
this._shop = _shop;
}
//實(shí)體店下單發(fā)貨
public void sale(String order) {
this._shop.sale(order);
}
}
//場(chǎng)景類
public class Client {
public static void main(String[] args) {
//定義一個(gè)鞋子實(shí)體店
IShop shoesShop = new ShoesShop();
//然后再定義"小Y雜貨店"代售
SmallYShopProxy proxy = new SmallYShopProxy(shoesShop);
proxy.sale("板鞋");
}
}
運(yùn)行結(jié)果如下:板鞋在Shopes店購(gòu)買成功
小Y的淘寶雜貨店的淘經(jīng)營(yíng)之路到這里基本上已經(jīng)實(shí)現(xiàn)了7脚亍T乱浮!
代理模式的優(yōu)點(diǎn)
-
職責(zé)清晰
真實(shí)的角色就是實(shí)現(xiàn)實(shí)際的業(yè)務(wù)邏輯瓣赂,不用關(guān)心其他非本職責(zé)的事務(wù)榆骚,通過(guò)后期的代理完成一件事務(wù),附帶的結(jié)果就是編程簡(jiǎn)潔清晰煌集。 -
高擴(kuò)展性
具體主題角色是隨時(shí)都會(huì)發(fā)生變化的妓肢,只要它實(shí)現(xiàn)了接口,甭管它如何變化苫纤,都逃不脫"小Y雜貨店"(接口)碉钠,那我們的代理類完全就可以在不做任何修改的情況下使用。
總結(jié)
到這里小Y的設(shè)計(jì)模式系列之一的代理模式也告一段落了卷拘,第一次寫設(shè)計(jì)模式的相關(guān)內(nèi)容喊废,如果有什么不足之處請(qǐng)指正,小Y愿意和大家抱著相互學(xué)習(xí)的態(tài)度共同進(jìn)步栗弟,喜歡的小伙伴們麻煩點(diǎn)個(gè)贊污筷,非常感謝大家的支持。