設計模式-外觀模式的應用
阿新 • • 發佈:2019-04-22
boolean poi exchange 來看 sta int get implement ace
現在很多商場都實行積分制,積分到了一定數額可以獲取相應的兌換物品。假如一個客戶(小馬),要在淘寶上,想要兌換一個aj鞋,那麽需要如何實現呢?
1、效驗小馬的積分是否達到該商品的積分要求。
2、效驗是否已經支付了積分。
3、效驗是否分配了物流單號。
經歷了這三步,就可以獲得自己想要的aj鞋子了。
那麽代碼如何實現呢?
我們先來看一下是否滿足條件的接口。
public abstract interface Executive { public boolean validation(PointGift pointGift); }
物品實體類:
public classPointGift { private String name; public PointGift(String name) { this.name = name; } public String getName() { return name; } }
積分滿足條件服務的實現:
public class IntegralService implements Executive { public boolean validation(PointGift pointGift) { System.out.println("校驗" + pointGift.getName() + "積分資格通過"); return true; } }
積分扣除的服務:
public class PointPaymentService implements Executive { public boolean validation(PointGift pointGift) { System.out.println("支付" + pointGift.getName() + "積分成功"); return true; } }
分配物流服務
public classShoppingService implements Executive{ public String getOrderNo(PointGift pointGift) { return null; } public boolean validation(PointGift pointGift) { //物流系統的對接邏輯 System.out.println(pointGift.getName() + "進入物流系統!"+"單號:666"); return true; } }
測試:
public class Test { public static void main(String[] args) { PointGift pointGift = new PointGift("衛衣"); GiftExchangeService giftExchangeService =new GiftExchangeService(); giftExchangeService.giftExchange(pointGift); } }
結果如下:
校驗衛衣積分資格通過 支付衛衣積分成功 衛衣進入物流系統!單號:666 Process finished with exit code 0
1、外觀模式的一般描述是:外觀模式定義了一個高層的功能,為子系統中的多個模塊協同的完成某種功能需求提供簡單的對外功能調用方式,使得這一子系統更加容易被外部使用。
外觀模式的目的不是給予子系統添加新的功能接口,而是為了讓外部減少與子系統內多個模塊的交互,松散耦合,從而讓外部能夠更簡單地使用子系統。
外觀模式的本質是:封裝交互,簡化調用。
2、外觀模式應用場景
當我們訪問的子系統擁有復雜額結構,內部調用繁雜,初接觸者根本無從下手時,不凡由資深者為這個子系統設計一個外觀類來供訪問者使用,統一訪問路徑(集中到外觀類中),將繁雜的調用結合起來形成一個總調用寫到外觀類中,之後訪問者不用再繁雜的方法中尋找需要的方法進行調用,直接在外觀類中找對應的方法進行調用即可。
還有就是在系統與系統之間發生調用時,也可以為被調用子系統設計外觀類,這樣方便調用也,屏蔽了系統的復雜性。
註意:
應用層絕對不能關心子系統,子系統只和外觀類通信,應用層只和外觀類通信。
* 子系統不經常變化的話,可以用實體外觀類
* 子系統經常變化的話,需要使用抽象外觀類。
設計模式-外觀模式的應用