Java設計模式(四) Facade(門面)模式及Tomcat引申
基本概念
Facade的概念
為子系統中的一組介面提供一個統一介面。Facade模式定義了一個更高層的介面,使子系統更加容易使用。
- 我們需要以一種比原有方式更簡單直接的辦法與系統互動,對於討論的複雜系統我們只有針對性地使用它的一個子集
- 因為Facade模式可以封裝多個子系統,可以減少客戶必須處理的物件的數量
- 要求一個子系統的外部與內部的通訊必須通過一個統一的物件進行。也就是說Facade物件是外界對於子系統的唯一通道,可以用來整合內部雜亂無章的子系統,不管是否敗絮其中,都能做到金玉其外
Facade模式的角色分工
Facade門面物件:
- 此角色知曉子系統的所有功能和責任。
- 一般情況下,本角色會將所有從客戶端發來的請求委派到相應的子系統去,也就是該角色沒有實際的業務邏輯,只是一個委託類。
- 門面物件一般不參與子系統內的業務邏輯的實現。(只提供一個訪問子系統的一個路徑而已)
- 作為一個對外的介面,在系統投入執行後,它是不應該被修改的,能夠隱藏和封裝子系統。
封裝子系統的意義:
- 跟蹤系統的使用情況:通過強制所有對系統的訪問都必須經過Facade,可以很容易地監視系統的使用情況
- 改換系統:未來可能需要改換系統。通過將原系統作為Facade類的一個私有成員,可以最省力地切換到新系統
Sub Systems子系統角色:
- 是一個類的集合,但彼此之間可以相互獨立
- 不知道門面物件的存在。
例講Facade
比如我們平時在使用電腦時,桌面上的檔案的快捷方式(或者是一個執行檔案),我們需要做的操作只是開啟和關閉,通常情況下完全不需要考慮用什麼開啟啊,設定什麼引數啊,關閉的時候應該如何銷燬資源才能保證程式的資料能夠不造成損失….這個可執行檔案就可以看做是一個門面。因為它極大地簡化了我們的操作,而且我們可以完全忽略和子系統之間的互動,而簡單地認為我是在和一個完整的系統進行互動。
下面提供一個開啟檔案操作的實現來說明一下,門面模式到底是個什麼樣:
- Sub Systems:
class OpenWord{
boolean isOpen;
String name = "Viewer";
OpenWord(){
isOpen = false;
}
void open(){
System.out.println("The " + name + " is opening....");
isOpen = true;
}
void stop(){
System.out.println("The " + name + " is closing....");
isOpen = false;
}
}
class PrepareFileSystem{
boolean isOpen;
String name = "FileSystem";
PrepareFileSystem(){
isOpen = false;
}
void open1(){
System.out.println("The " + name + " is opening....");
isOpen = true;
}
void stop1(){
System.out.println("The " + name + " is closing....");
isOpen = false;
}
}
class OperateFile{
void showFile ( String name ){
System.out.println("Show the content of the file: " + name);
}
}
上述都是為了實現Facade,所以不用太在意,當作提供功能的介面類即可。
- Facade門面物件
public class OpenFileFacade {
//必須是私有成員,否則會將子系統暴露給外部
private OpenWord openWord = new OpenWord();
private PrepareFileSystem prepareFileSystem = new PrepareFileSystem();
private OperateFile operateFile = new OperateFile();
//只是提供一條訪問路徑,不實現業務邏輯
public void openFile ( String name ){
prepareFileSystem.open1();
openWord.open();
operateFile.showFile( name );
}
public void closeFile ( String name ){
openWord.stop();
prepareFileSystem.stop1();
}
public static void main ( String [] args ){
OpenFileFacade a = new OpenFileFacade();
a.openFile("cookBook");
a.closeFile("cookBook");
}
}
Facade應用場景
- 為一個複雜的模組或子系統提供一個共外界訪問的介面
- 子系統相對獨立,外界對子系統的訪問只要黑箱操作即可。
- 預防低水平人員帶來的風險擴散(解決專案中開發人員的水平差距的問題)
- 降低了個人程式碼質量對整個專案的影響的風險,一般的做法是畫地為牢,只能在指定的子系統中的開發,然後再提供門面介面進行訪問。
- 可以針對同一套子系統實現不同的門面類,來方便不同開發者對於子系統的使用,降低介面交流的成本和風險。
Tomcat中門面模式的使用
- HttpRequest和HttpResponse都實現了自己的Facade類:
- HttpRequestFacade
- HttpResponseFacade
- 我們以HttpRequestFacade為例,通過它收集的訪問都委派給了HttpRequest,通常被封裝的物件都設為Private或者Protected,以防止在Facade中直接訪問。
相關推薦
Java設計模式(四) Facade(門面)模式及Tomcat引申
基本概念 Facade的概念 為子系統中的一組介面提供一個統一介面。Facade模式定義了一個更高層的介面,使子系統更加容易使用。 我們需要以一種比原有方式更簡單直接的辦法與系統互動,對於討
【編程思想】【設計模式】【結構模式Structural】門面模式/外觀模式Facade
pla each serve com pro rep compute source import Python版 https://github.com/faif/python-patterns/blob/master/structural/facade.py #!/
六種常用的設計模式java實現(四)模板模式
模板模式,估計大家應該都接觸過,比如說,在完成某個業務邏輯前,需要處理一點事,在完成後也要處理一點事,這樣就可以把不一樣的地方給抽象出來,然後公共的地方都是一樣的,這樣的場景就會用到模板模式。 一、基本概念 模板方法模式是類的行為模式。準備一個抽象類,將部分
4.泡妞與設計模式(四)享元模式
sage eight 客戶端 pms AI 一個 div 創建 stdlib.h FLYWEIGHT 享元模式 享元模式:FLYWEIGHT在拳擊比賽中指最輕量級。享元模式以共享的方式高效的支持大量的細粒度對象。享元模式能做到共享的關鍵是區分內蘊狀態和外蘊狀態。內蘊狀態存儲
【Python設計模式】04 門面模式-與門面相適
四、門面模式-與門面相適 Python3.x 本章研究結構型設計模式:門面模式 本章主題 結構型設計模式概要 利用UML圖理解門面設計模式 Python3.x實現程式碼的真實用例 門面模式與最少知識原則 1. 理解結構型設計模式
設計模式 (十七) 門面模式
門面模式 也叫外觀模式,是一種常用的封裝模式。 要求一個子系統的外部與其內部通訊必須通過一個統一的物件進行。 門面模式提供一個高層次的介面,使得子系統更易於使用。 舉個例子,對應一個寫信的過程,就是一個人自己寫信,先寫內容,再寫信封,再放到信封裡,然後郵寄。後來郵局開了個服務,只要告
設計模式 (四)——簡單工廠模式(Simple Factory,建立型)
1.概述 使用設計模式可以提高程式碼的可複用性、可擴充性和可維護性。簡單工廠模式(Simple Factory Pattern)屬於建立型模式。簡單工廠模式,由一個工廠物件決定創建出哪一種產品類的例項,它經常被用於封裝建立物件的程式碼。 簡單工廠模式類圖結構
Python設計模式(四) -- 模板方法模式
模板方法模式 定義 定義了一個演算法的步驟,並允許子類別為一個或多個步驟提供其實踐方式。讓子類別在不改變演算法架構的情況下,重新定義演算法中的某些步驟 適用場景: 事務處理的步驟具有共性,只是具體實施,根據處理步驟中的實現的方法產生差異
慕課網----大話PHP設計模式 四(介面卡模式,資料物件對映模式,觀察者模式)
12.介面卡模式 可以將截然不同的函式介面封裝成統一的API 實際應用舉例,php的資料庫操作有mysql,mysqli,pdo 3種,可以用介面卡模式統一成一致。類似的場景還有cache介面卡,將memcache,redis,file,apc等不同的快取函
java23種設計模式——四、原型模式
原始碼在我的[github](https://github.com/witmy/JavaDesignPattern)和[gitee](https://gitee.com/witmy/JavaDesignPattern)中獲取 # 目錄 [java23種設計模式—— 一、設計模式介紹](https://www.
LVS模式四:FULLNAT模式(環境構造:編譯核心)
fullnat模式原理圖: FULLNAT模式原理: 1、client主機(cip)將請求發往前端的負載均衡器(vip),請求報文源地址是CIP,目標地址為VIP。負載均衡器收到報文後,發現請求的是在規則裡面存在的地址,那麼它將客戶端請求報文的源MAC地址改為自己DIP的MAC地址,目
Java學習筆記13-- web伺服器介紹及Tomcat的使用;jdk,eclipse,tomcat關係以及安裝順序;http協議
web伺服器介紹及Tomcat的使用 jdk,eclipse,tomcat關係以及安裝順序 1、eclipse安裝前必須要先裝jdk 1、沒有JDK的話,無法安裝或者執行eclipse。 2、JDK 是整個Java的核心,包括了Java執行環境,Java
java設計模式之門面模式及Java實現
一、概念 門面模式(Facade)也叫外觀模式,它隱藏了系統的複雜性,並向客戶端提供了一個可以訪問系統的介面,所以門面模式也是一種結構性模式。門面模式為子系統的一組介面提供一個統一的訪問介面(入口),客戶端直接通過門面類裡的統一的訪問介面,來間接呼叫子系統的方
java設計模式singleton原理及實現
最新 不必要 -- 不同 適合 所有 引用 ati cnblogs 題外話:我要變強,要變強,變強,強。 1、 Singleton的應用場景以及為什麽要使用singleSingleton是一生只能有一個實例的對象。只能由singleton自身創建一個實例。外人是無法創建實例
【JAVA設計模式】外觀模式(Facade Pattern)
簡單 產生 creat ide oid dsm ref 功能 .net 一 定義 為子系統中的一組接口提供一個一致的界面。Facade模式定義了一個高層的接口,這個接口使得這一子系統更加easy使用。 二 案例 一個子系統中擁有3個模塊。每一個模塊
Java設計模式(三) Visitor(訪問者)模式及多分派場景應用
public mod 項目 getname total college hide word dsm 基本概念 Visitor 封裝一些作用於數據結構中的各元素的操作,不同的操作能夠借助新的visitor實現。減少了操作間的耦合性 訪問者能夠將數
Java設計模式之《單例模式》及應用場景
urn vol 運行 www 同步問題 href 外部 占用 模式 轉載參考:http://www.cnblogs.com/V1haoge/p/6510196.html 所謂單例,指的就是單實例,有且僅有一個類實例,這個單例不應該由人來控制,而應該由代碼來限制,強制單例。
Java設計模式之《外觀模式》及應用場景
nbsp str 之間 系統設計 static 系統 被調用 sub div 轉載參考:http://www.cnblogs.com/V1haoge/p/6484128.html 1、外觀模式簡介 外觀模式,一般用在子系統與訪問之間,用於對訪問屏蔽復雜的子系統調用,采用
門面模式-Facade Pattern(Java實現)
RKE 代碼 調用 trac make pat sys ride 工作 門面模式-Facade Pattern 為一個復雜的模塊或子系統提供一個簡單的供外界訪問的接口 本文中代碼的例子如下: 一個礦場有很多礦工, 礦工的職責也都不一樣. 但一樣的是什麽呢? 一樣的就是每
Java 設計模式 之 門面模式
RR pla acad cad www. imp inter vat nts http://www.verejava.com/?id=16999102164568 package com.facade.theory; public class TestFacade {