1. 程式人生 > >23種設計模式-門面模式(外觀模式)

23種設計模式-門面模式(外觀模式)

1.產生背景

  • 為什麼需要門面模式
    這裡寫圖片描述

我是一個辛苦一輩子的農民,攢了幾十年錢,現在日子好了,也想建一套屬於自己的小洋樓;

首先,我要僱一個搬磚的和一個和泥的,還要一個會砌牆的人;可是我到哪裡去找這些人,還要一個一個跟他們談價錢;不知道他們和不和得來,會不會幹一半不幹了;

哎,好煩;

要是有一個人什麼都會就好,我只要跟他談,他一個人就能幫我把房子建好;
總之,我就是想省心;
這裡寫圖片描述

2.概念

提供一個統一的介面去訪問多個子系統的多個不同的介面,它為子系統中的一組介面提供一個統一的高層介面。使用子系統更容易使用。

本質:就是化零為整;引入一箇中介類,把各個分散的功能組合成一個整體,只對外暴露一個統一的介面;

這兩年流行微服務,即化整為零,把一個大服務拆分成一個個零部件;
而門面模式則是反其道,是化零為整;

3.目的

為了使用者使用方便,把過度拆分的分散功能,組合成一個整體,對外提供一個統一的介面

4.解決方案

本質:引入一個第三方中介類,這個類集合了多個零部件類的功能,實際功能則委託給這些零部件物件,這個類只是做為對外的統一介面,只是一個馬甲;

  • 引入中介物件
  • 有許多細粒度的小物件
  • 中介物件暴露了這些小物件的功能;
  • 中介物件實際功能委託給這些小物件
  • 中介物件提供給外部使用(對外隱藏那些小物件)

圖片來自百科
這裡寫圖片描述

5. 類圖

所有實現類的地方都可以面向抽像程式設計(增加介面)
這裡寫圖片描述

6.優缺點

優點:

  • 鬆耦合
    使用者與子系統解耦,遮蔽子系統;可以提高子系統的獨立性;

  • 使用簡單
    簡化使用者與子系統的依賴關係;
    使用者只與門面對接,有統一的入口;不需要知道所有子系統及內部構造;

缺點:

  • 不規範的程式設計方式
    沒有面向抽象程式設計,而是通過增加中介層,轉換服務提供方的服務介面;

最核心的目的:簡化子系統,簡化客戶使用,遮蔽多個子系統

7.應用場景

  • A:簡化子系統複雜性時。
  • B:監控所有子系統時;通過門面控制了入口,可以統一監控;
  • C:希望封裝和隱藏子系統時;
  • D:兩歷史系統進行改造並打通關係時;

8.現實案例

spring ApplicationContext;
它實現了Factory、ResourceLoader等介面,並通過引用這些介面的例項,對外統一提供:載入配置、解析資源、建立Bean、提供環境、啟動流程等功能;

客戶程式碼只需要操作context就可以獲取spring的提供的功能,而無需關心內部的細節;

9.注意事項

“與代理模式的區別”
在瞭解門面模式時,會發現它不僅與代理模式很像,與裝飾器模式也很類似;
它們之間到底有什麼樣的區別呢?

相似點:
- 都引入了中介類(物件)
- 中介物件都引用並把功能委託給了原物件
- 都起到了”代理”功能

區別
- 代理側重於對原物件的訪問控制(當然也可以不是控制而是功能增強)
- 代理與原類實現相同的抽象(相同介面或直接繼承原業)
- 代理只代理一個類
- 門面側重於功能整合(多個小系統或小物件整合成一個功能豐富的大物件)
- 門面可以與子系統具有不同的抽象(具有不同的介面,可以對方法重新起名)
- 門面代理的是一系列類

相關推薦

23設計模式-門面模式(外觀模式)Facade

1.產生背景 為什麼需要門面模式 我是一個辛苦一輩子的農民,攢了幾十年錢,現在日子好了,也想建一套屬於自己的小洋樓; 首先,我要僱一個搬磚的和一個和泥的,還要一個會砌牆的人;可是我到哪裡去找這些人,還要一個一個跟他們談價錢;不知道他們和不和得來,會不會幹一半不幹了; 哎,好

23設計模式-門面模式(外觀模式)

1.產生背景 為什麼需要門面模式 我是一個辛苦一輩子的農民,攢了幾十年錢,現在日子好了,也想建一套屬於自己的小洋樓; 首先,我要僱一個搬磚的和一個和泥的,還要一個會砌牆的人;可是我到哪裡去找這些人,還要一個一個跟他們談價錢;不知道他們和不

23設計模式(21):外觀模式

system res === pan 需要 存在 -s lang 這一 概述: 為子系統中的一組接口提供一個一致的界面,Facade模式定義了一個高層接口,這個接口使得這一子系統更加容易使用。 類型:結構型模式。 類圖: 1.當你要為一個復雜子系統提供一個簡單接口時

java23設計模式-門面外觀模式

定義 外觀模式為子系統的一組介面提供一個一致的介面,此模式定義了一個高層介面,這個介面使得這一子系統更加容易使用。 UML 角色 子系統(SubSystem): 表示一個系統的子系統或者模組 門面(Facade): 客戶端通過門面間接控制子系統。門面遮蔽

23設計模式---11.門面模式

門面模式(Facade Pattern)隱藏系統的複雜性,並向客戶端提供了一個客戶端可以訪問系統的介面。這種型別的設計模式屬於結構型模式,它向現有的系統新增一個介面,來隱藏系統的複雜性。 1.建立一個實體類如:CPU,DISK 2.一個包裝類 其實就是封裝,將具體的實現封裝出

23設計模式之——門面模式

1.定義 門面模式(Facade Pattern)也叫做外觀模式,是一種比較常用的封裝模式,其定義如下: Provide a unified interface to a set of interf

23設計模式-9.外觀模式(Facade Pattern)

動機(Motivate):     在軟體開發系統中,客戶程式經常會與複雜系統的內部子系統之間產生耦合,而導致客戶程式隨著子系統的變化而變化。那麼如何簡化客戶程式與子系統之間的互動介面?如何將複雜系統的內部子系統與客戶程式之間的依賴解耦? 意圖(Intent):     為

23設計模式-外觀模式(Facade Pattern)

一、 門面(Facade)模式 外部與一個子系統的通訊必須通過一個統一的門面(Facade)物件進行,這就是門面模式。 醫院的例子 用一個例子進行說明,如果把醫院作為一個子系統,按照部門職能,這個系統可以劃分為掛號、門診、劃價、化驗、收費、取藥等。看病的病人要與這些

23設計模式介紹以及單例模式的學習

單例模式 餓漢式 23種設計模式 gof23 1、GOF23 設計模式總共分成創建型模式、結構型模式和行為型模式三種: a、創建型模式: - 單例模式、工廠模式、抽象工廠模式、建造者模式、原型模式 b、構建型模式: - 適配器模式、橋接模式、裝配模式、組合模式、建造者模

23設計模式介紹(一)---- 創建型模式

接口 ret static 深復制 return 對象 相互 object c png 由於設計模式篇幅比較大,如果在一篇文章講完所有的設計模式的話不利於閱讀。於是我把它分為三篇文章 23種設計模式介紹(一)---- 創建型模式 23種設計模式介紹(二)---- 結構型模

【Unity與23設計模式】狀態模式(State)

unity public text 開始 sys 狀態模式 改變 val 繼承 定義: “讓一個對象的行為隨著內部狀態的改變而變化,而該對象也像是換了類一樣” 應用場景: 角色AI:控制角色在不同狀態下的AI行為 服務器連接狀態:開始連線、連線中、斷線等狀態 關卡進

轉:23設計模式的應用場景

橋模式 man 16px pop 表示 black strong art bstr 設計模式主要分三個類型:創建型、結構型和行為型。 其中創建型有: 一、Singleton,單例模式:保證一個類只有一個實例,並提供一個訪問它的全局訪問點 ;

【Unity3D與23設計模式】建造者模式(Builder)

產出 private 一個 gof 行為 並且 bstr reac 定義 GoF中定義: “將一個復雜的構建流程與它的對象表現分離出來,讓相同的構建流程可以產生不同的對象行為表現。” 建造者模式可以分為兩個步驟來實施: 1.將復雜的構建流程獨立出來,並將整個流程分成

23設計模式中的叠代器模式

pos over arr imp @override 一個 next() int position 叠代器模式:提供一種方法順序訪問一個聚合對象中的各個對象。 那麽如何提供一個方法順序呢? public interface Iterator<T>{   publ

23設計模式中的訪問者模式

功能需求 封裝 改變 擴展 數據結構 模式 困難 操作 如果 訪問者模式:對於一組對象,在不改變數據結構的前提下,增加作用於這些結構元素新的功能。 適用於數據結構相對穩定,它把數據結構和作用於其上的操作解耦,使得操作集合可以相對自由地演化。 優點: 符合單一職責原則 擴展性

23設計模式中的原型模式

1-1 ... 實例代碼 sets each png 為什麽 .get protect 原型模式:通過復制現有實例來創建新的實例,無須知道相應類的信息。 個人見解:在大量循環時,需要初始化對象,用 原型模式能節省大量的初始化所花費的時間,值得一談的是淺復制和深復制 淺復制:

java 23設計模式

代理 建造者 學習 article 適配器 htm ava arc 叠代 備註這是別人總結的本來想轉載可惜不會怎麽轉載(感謝) 以下是學習過程中查詢的資料,別人總結的資料,比較容易理解(站在各位巨人的肩膀上,望博主勿究) 創建型抽象工廠模式 http://www.cnblo

23設計模式之觀察者模式

主題 一個 server bsp 監聽 images 關系 .com 自動更新 觀察者模式(Observer):定義了一種一對多的關系,讓多個觀察者對象同時監聽某一個主題對象。這個主題對象在狀態發生變化時,會通知所有觀察者對象,使它們能夠自動更新自己。 23種設計模式之

23設計模式之抽象工廠模式

tor turn sql數據庫 png insert face sign 相關 reat 抽象工廠模式(Abstract Factory):提供一個創建一系列相關或相互依賴對象的接口,而無需指定它們具體的類。 package designMode.abstractFa

23設計模式之模板方法模式

技術分享 cnblogs ati strac void package com rim div 模板方法模式(TemplateMethod):定義一個操作中的算法的骨架,而將一些步驟延遲到子類中。模板方法使得子類可以不改變一個算法的結構即可重定義該算法的某些特定步驟。