1. 程式人生 > >Java設計模式(四) Facade(門面)模式及Tomcat引申

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 {