前端筆記記錄---簡單導航欄的實現
這個模式我理解是這樣的,客戶端直接和業務系統打交道太麻煩了,可能呼叫業務系統好多類,你業務系統能不能給我一個類,這個類裡面封裝了好多業務系統的其他功能,客戶端掉的時候直接通過這個類就能完成。
如圖:
使用前:
使用後:
定義:
外觀模式(Facade Pattern)隱藏系統的複雜性,並向客戶端提供了一個客戶端可以訪問系統的介面。這種型別的設計模式屬於結構型模式,它向現有的系統新增一個介面,來隱藏系統的複雜性。
意圖:
為子系統中的一組介面提供一個一致的介面,外觀模式定義了一個高層介面,這個介面使得這一子系統更加容易使用。
主要解決:
降低訪問複雜系統的內部子系統時的複雜度,簡化客戶端與之的介面。
何時使用:
1、客戶端不需要知道系統內部的複雜聯絡,整個系統只需提供一個"接待員"即可。 2、定義系統的入口。
如何解決:
客戶端不與系統耦合,外觀類與系統耦合。
關鍵程式碼:
在客戶端和複雜系統之間再加一層,這一層將呼叫順序、依賴關係等處理好。
應用例項:
1、去醫院看病,可能要去掛號、門診、劃價、取藥,讓患者或患者家屬覺得很複雜,如果有提供接待人員,只讓接待人員來處理,就很方便。 2、JAVA 的三層開發模式。
優點:
1、減少系統相互依賴。 2、提高靈活性。 3、提高了安全性。
缺點:
不符合開閉原則,如果要改東西很麻煩,繼承重寫都不合適。
使用場景:
1、為複雜的模組或子系統提供外界訪問的模組。 2、子系統相對獨立。 3、預防低水平人員帶來的風險。
注意事項:
在層次化結構中,可以使用外觀模式定義系統中每一層的入口。
UML圖:
請看程式碼:
步驟一:
public interface Shape { void draw(); }
步驟2:
public class Rectangle implements Shape { @Override public void draw() { System.out.println("Rectangle::draw()"); } }
public class Square implements Shape { @Overridepublic void draw() { System.out.println("Square::draw()"); } }
public class Circle implements Shape { @Override public void draw() { System.out.println("Circle::draw()"); } }
步驟3(關鍵步驟啊,外觀模式):
public class ShapeMaker { private Shape circle; private Shape rectangle; private Shape square; public ShapeMaker() { circle = new Circle(); rectangle = new Rectangle(); square = new Square(); } public void drawCircle(){ circle.draw(); } public void drawRectangle(){ rectangle.draw(); } public void drawSquare(){ square.draw(); } }
步驟4(輸出):
public class FacadePatternDemo { public static void main(String[] args) { ShapeMaker shapeMaker = new ShapeMaker(); shapeMaker.drawCircle(); shapeMaker.drawRectangle(); shapeMaker.drawSquare(); } }
參考:https://www.runoob.com/design-pattern/facade-pattern.html