前言
在移動開發行業中,每隔一段時間都會出現新的技術,很多人都會感嘆跟不上新技術,對於這個問題,小Y個人覺得,抓不變應對萬變才是制勝之道,良好的程式設計習慣和優秀的設計模式永遠不會過時,因此小Y把代理模式作為開啟設計模式以及程式猿修養之路的開篇之作。
代理模式定義
為其他物件提供一種代理以控制對這個物件的訪問。
角色介紹
- Subject抽象主題角色 抽象主題類可以是抽象類也可以是介面,是一個最普通的業務型別定義,無特殊要求。
- RealSubject具體主題角色
也叫做被委託角色、被代理角色。是業務邏輯的具體執行者。 - Proxy代理主題角色 把所有抽象主題類定義的方法限制委託給真實主題角色實現,並且在真實主題角色處理完畢前後做預處理和善後處理工作,Proxy和具體主題都是去實現抽象主題。
案例
看完上面的一些定義式介紹,小Y相信很多小夥伴對這些理論性的東西不太感冒,覺得還不如簡單粗暴通過例項講解實際點,確實如此,但是小Y個人覺得理論性的東西能夠輔助大家更好地去理解例項。哎呀,尼瑪,小Y廢話太多,還是趕緊進入主題吧。 1.故事描述 面對著這種程式碼高危職業,小Y果斷決定棄碼從商,經過一番東拼西湊,終於成功在淘寶網上開起了“小Y雜貨店”,店裡的貨物每次都要親身去進貨出貨,對於懶惰的小Y來說簡直就是虐待啊,因此這種經營方式果斷拋棄。聰明的立馬小Y想到了和線下的實體店合作,把賣鞋子的、賣衣服的商品店鋪統統放到“小Y雜貨店“”上面,小Y接到訂單再把訂單下發到所屬實體店發貨,小Y就可以輕鬆地賺到商品差價(小Y此刻正在意淫著未來的白富帥生活),啊哈哈哈。。。。。。
2.故事簡化-神奇的UML3.程式碼實現
//商家介面
public interface IShop {
//貨物訂單
public void sale(String order);
}
// 賣鞋子的實體店
public class ShoesShop implements IShop{
public void sale(String order){
System.out.println(order+"在Shopes店購買成功");
}
}
// 賣衣服的實體店
public class ClothesShop implements IShop{
public void sale(String order){
System.out.println(order+"在Clothes店購買成功");
}
}
//“小Y雜貨店”代理銷售
public class SmallYShopProxy implements IShop {
private IShop _shop = null;
//通過建構函式傳遞要對誰進行代售
public SmallYShopProxy(IShop _shop){
this._shop = _shop;
}
//實體店下單發貨
public void sale(String order) {
this._shop.sale(order);
}
}
//場景類
public class Client {
public static void main(String[] args) {
//定義一個鞋子實體店
IShop shoesShop = new ShoesShop();
//然後再定義"小Y雜貨店"代售
SmallYShopProxy proxy = new SmallYShopProxy(shoesShop);
proxy.sale("板鞋");
}
}
執行結果如下:板鞋在Shopes店購買成功
複製程式碼
小Y的淘寶雜貨店的淘經營之路到這裡基本上已經實現了!!!
代理模式的優點
- 職責清晰
真實的角色就是實現實際的業務邏輯,不用關心其他非本職責的事務,通過後期的代理完成一件事務,附帶的結果就是程式設計簡潔清晰。 - 高擴充套件性 具體主題角色是隨時都會發生變化的,只要它實現了介面,甭管它如何變化,都逃不脫"小Y雜貨店"(介面),那我們的代理類完全就可以在不做任何修改的情況下使用。
總結
到這裡小Y的設計模式系列之一的代理模式也告一段落了,第一次寫設計模式的相關內容,如果有什麼不足之處請指正,小Y願意和大家抱著相互學習的態度共同進步,喜歡的小夥伴們麻煩點個贊,非常感謝大家的支援。