設計模式系列之「代理模式」

YoungManSter發表於2017-12-02

前言

在移動開發行業中,每隔一段時間都會出現新的技術,很多人都會感嘆跟不上新技術,對於這個問題,小Y個人覺得,抓不變應對萬變才是制勝之道,良好的程式設計習慣和優秀的設計模式永遠不會過時,因此小Y把代理模式作為開啟設計模式以及程式猿修養之路的開篇之作。

代理模式定義

為其他物件提供一種代理以控制對這個物件的訪問。

角色介紹

代理模式通用UML.png

  • Subject抽象主題角色 抽象主題類可以是抽象類也可以是介面,是一個最普通的業務型別定義,無特殊要求。
  • RealSubject具體主題角色
    也叫做被委託角色、被代理角色。是業務邏輯的具體執行者。
  • Proxy代理主題角色 把所有抽象主題類定義的方法限制委託給真實主題角色實現,並且在真實主題角色處理完畢前後做預處理和善後處理工作,Proxy和具體主題都是去實現抽象主題。

案例

看完上面的一些定義式介紹,小Y相信很多小夥伴對這些理論性的東西不太感冒,覺得還不如簡單粗暴通過例項講解實際點,確實如此,但是小Y個人覺得理論性的東西能夠輔助大家更好地去理解例項。哎呀,尼瑪,小Y廢話太多,還是趕緊進入主題吧。 1.故事描述 面對著這種程式碼高危職業,小Y果斷決定棄碼從商,經過一番東拼西湊,終於成功在淘寶網上開起了“小Y雜貨店”,店裡的貨物每次都要親身去進貨出貨,對於懶惰的小Y來說簡直就是虐待啊,因此這種經營方式果斷拋棄。聰明的立馬小Y想到了和線下的實體店合作,把賣鞋子的、賣衣服的商品店鋪統統放到“小Y雜貨店“”上面,小Y接到訂單再把訂單下發到所屬實體店發貨,小Y就可以輕鬆地賺到商品差價(小Y此刻正在意淫著未來的白富帥生活),啊哈哈哈。。。。。。

網路圖片.jpg
2.故事簡化-神奇的UML
銷售代理模式UML.png

3.程式碼實現

  //商家介面  
  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願意和大家抱著相互學習的態度共同進步,喜歡的小夥伴們麻煩點個贊,非常感謝大家的支援。

Android技術交流吧

相關文章