1. 程式人生 > 其它 >前端筆記記錄---簡單導航欄的實現

前端筆記記錄---簡單導航欄的實現

這個模式我理解是這樣的,客戶端直接和業務系統打交道太麻煩了,可能呼叫業務系統好多類,你業務系統能不能給我一個類,這個類裡面封裝了好多業務系統的其他功能,客戶端掉的時候直接通過這個類就能完成。

如圖:

使用前:

使用後:

定義:

外觀模式(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 {
 
   @Override
   
public 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