java設計模式--外觀模式(門面模式)
阿新 • • 發佈:2018-12-04
簡介:
外觀模式(Facade),他隱藏了系統的複雜性,並向客戶端提供了一個可以訪問系統的介面。這種型別的設計模式屬於結構性模式。為子系統中的一組介面提供了一個統一的訪問介面,這個介面使得子系統更容易被訪問或者使用
角色:
1).門面角色(facade):外觀模式的核心。它被客戶角色呼叫,它熟悉子系統的功能。內部根據客戶角色的需求預定了幾種功能的組合。
2).子系統角色:實現了子系統的功能。它對客戶角色和Facade時未知的。它內部可以有系統內的相互互動,也可以由供外界呼叫的介面。
3).客戶角色(client):通過呼叫Facede來完成要實現的功能。
個人總結:說白了該模式就是把一個複雜了流程封裝成一個簡單的介面供給外部使用者更簡單的使用,並且不用知道內部系統是如何實現的,客戶只要和facade互動。
例項:
電腦:我們電腦 裡面有 CPU 顯示卡 記憶體 硬碟 (子系統)普通人使用者只需要知道這是一臺電腦就行了(門面) 電腦當然我們不可能去一個一個開關機吧,所有要設計一個總開關控制裡面的所有模組的開關機。
子系統
package com.sl.demo.facade; /** * CPU * @author pengkun * */ public class CPU { //開啟 public void start() { System.out.println("CPU開啟了。。。。"); } //關閉 public void stop() { System.out.println("CPU關閉了。。。。"); } } package com.sl.demo.facade; /** * 顯示卡 * @author pengkun * */ public class GraphicsCard { //開啟 public void start() { System.out.println("顯示卡開啟了。。。。"); } //關閉 public void stop() { System.out.println("顯示卡關閉了。。。。"); } } package com.sl.demo.facade; /** * 記憶體 * @author pengkun * */ public class Memory { //開啟 public void start() { System.out.println("記憶體開啟了。。。。"); } //關閉 public void stop() { System.out.println("記憶體關閉了。。。。"); } }
門面
package com.sl.demo.facade; /** * 電腦(門面角色) * @author pengkun * */ public class Computer { //包含子系統 private CPU cpu; private GraphicsCard graphicsCard; private Memory memory; public Computer() { super(); this.cpu =new CPU(); this.graphicsCard = new GraphicsCard(); this.memory = new Memory(); } //開啟 public void start() { System.out.println("電腦開啟了。。。。"); cpu.start(); graphicsCard.start(); memory.start(); } //關閉 public void stop() { System.out.println("電腦關閉了。。。。"); cpu.stop(); graphicsCard.stop(); memory.stop(); } }
測試:
@Test
public void test() {
Computer computer=new Computer();
//開機
computer.start();
System.out.println("--------------------------");
//關機
computer.stop();
}
電腦開啟了。。。。
CPU開啟了。。。。
顯示卡開啟了。。。。
記憶體開啟了。。。。
--------------------------
電腦關閉了。。。。
CPU關閉了。。。。
顯示卡關閉了。。。。
記憶體關閉了。。。。
總結:
該模式使得客戶端和子系統之間解耦,讓子系統內部的模組功能更容易擴充套件和維護,客戶端根本不需要知道子系統內部的實現,或者根本不需要知道子系統內部的構成,它只需要跟Facade類互動即可。有些方法是對系統外的,有些方法是系統內部相互互動的使用的。子系統把那些暴露給外部的功能集中到門面中,這樣就可以實現客戶端的使用,很好的隱藏了子系統內部的細節。