<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
門面模式(Facade Pattern)又叫外觀模式,屬於結構性模式。
它提供一個統一的介面去存取多個子系統的多個不同的介面,它為子系統中的一組介面提供一個統一的高層介面。使得子系統更容易使用。
使用者端不需要知道系統內部的複雜聯絡,只需定義系統的入口。即在使用者端和複雜系統之間再加一層,這一層將呼叫順序、依賴關係等處理好。
為複雜的模組或子系統提供外界存取的模組。
子系統相對獨立。
預防額外操作帶來的風險。
降低存取複雜系統的內部子系統時的複雜度,簡化使用者端之間的介面。
優點:
減少系統相互依賴。
提高靈活性。
提高安全性。
缺點:
不符合開閉原則,如果要改東西很麻煩,繼承重寫都不合適。也就是說系統可以提供新的功能模組而不必進行修改。
門面模式主要包含2種角色:
1.外觀角色(Facade):
外觀角色也稱門面角色,系統對外的統一介面;
2.子系統角色(SubSystem):
可以同時有一個或多個SubSystem。每個SubSytem都不是一個單獨的類,而是一個類的集合。
SubSystem並不知道Facade的存在,對於SubSystem而言,Facade只是另一個使用者端而已(即Facade對SubSystem透明)
建立2個建立子系統角色:SubSystemA 與SubSystemB
public class SubSystemA { public void subSystem() { System.out.println("subSystem A"); } }
public class SubSystemB { public void subSystem() { System.out.println("subSystem B"); } }
public class Facade { private SubSystemA a = new SubSystemA(); private SubSystemB b = new SubSystemB(); /** * 提供對外介面 */ public void subSystemA() { this.a.subSystem(); } /** * 提供對外介面 */ public void subSystemB() { this.b.subSystem(); } }
public static void main(String[] args) { Facade facade = new Facade(); facade.subSystemA(); facade.subSystemB(); }
如商城系統中的下單,下單過程可能涉及多個模組子系統的聯動操作,如果分別傳送網路請求各個模組子系統的介面,會增加一定複雜度與額外的網路請求。
此時可以採取門面模式,將所有相關介面整合到一個介面中,由後端提供一個介面給前端呼叫。
假設在一個商城系統中,涉及庫存系統、支付系統、物流系統、入口系統。使用者下單時進行校驗庫存,驗證支付,最後發貨這一整個過程串聯起來,提供一個統一介面供使用者端呼叫。
public class StockSys { /** * 庫存校驗 */ public Boolean verify(){ if (Math.random()*10 >5) { System.out.println("StockSys verify success"); return true; } System.out.println("StockSys verify fail"); return false; } }
public class PaySys { /** * 支付 */ public Boolean pay() { if (Math.random()*10 >2) { System.out.println("PaySys pay success"); return true; } System.out.println("PaySys pay fail"); return false; } }
public class LogisticsSys { /** * 發貨 */ public void ship() { System.out.println("logistics ship"); } }
public class MySys { StockSys stockSys = new StockSys(); PaySys paySys = new PaySys(); LogisticsSys logisticsSys = new LogisticsSys(); public void order() { if (stockSys.verify()) { if (paySys.pay()) { logisticsSys.ship(); } } } }
public static void main(String[] args) { new MySys().order(); }
StockSys verify success
PaySys pay success
logistics shipStockSys verify fail
StockSys verify success
PaySys pay fail
到此這篇關於Java設計模式中的門面模式詳解的文章就介紹到這了,更多相關Java門面模式內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45