外觀模式(門面模式)- 結構型模式

来源:https://www.cnblogs.com/kobe-lin/archive/2019/10/15/11675067.html
-Advertisement-
Play Games

模式的定義 門面模式(Facade Pattern)也叫做外觀模式,是一種比較常用的封裝模式,其定義如下:要求一個子系統的外部與其內部通信必須通過一個統一的對象進行。門面模式提供一個高層次的介面,使得子系統更易於使用。 門面模式註重“統一的對象”,也就是提供一個訪問子系統的介面,除了這個介面,不允許 ...


模式的定義

門面模式(Facade Pattern)也叫做外觀模式,是一種比較常用的封裝模式,其定義如下:要求一個子系統的外部與其內部通信必須通過一個統一的對象進行。門面模式提供一個高層次的介面,使得子系統更易於使用。

門面模式註重“統一的對象”,也就是提供一個訪問子系統的介面,除了這個介面,不允許有任何訪問子系統的行為發生

模式的結構

外觀(Facade)模式包含以下主要角色。

1.外觀(Facade)角色:為多個子系統對外提供一個共同的介面。

2.子系統(Sub System)角色:實現系統的部分功能,客戶可以通過外觀角色訪問它。

3.客戶(Client)角色:通過一個外觀角色訪問各個子系統的功能。

 其結構圖如下:

 

 模式的實現

   子系統:

public class ClassA{

  public void doSomethingA(){

    // 業務邏輯

  }

}

public class ClassB{

  public void doSomethingB(){

    // 業務邏輯

  }

}

public class ClassC{

  public void doSomethingC(){

    // 業務邏輯

  }

}

門面對象:

public class Facade{

  //被委托的對象

  private ClassA a = new ClassA();

  private ClassB b = new ClassB();

  private ClassC c = new ClassC();

  //提供給外部訪問的方法

  public void methodA(){

    this.a.doSomethingA();

  }

  public void methodB(){

    this.b.doSomethingB();

  }

  public void methodC(){

    this.c.doSomethingC();

  }

 

}


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 在高併發業務場景下,消息隊列在流量削峰、解耦上有不可替代的作用。當前使用較多的消息隊列有 RabbitMQ、RocketMQ、ActiveMQ、Kafka、ZeroMQ、Pulsar 等。 消息隊列這麼多,到底該選擇哪款消息隊列呢? 選擇消息隊列的基本標準 雖然這些消息隊列在功能和特性方面各有優劣, ...
  • 1. 概述 logstash把格式化的數據發送到elasticsearch以後,elasticsearch負責存儲搜索日誌數據 elasticsearch的搜索介面還是很強大的,這邊不詳細展開,因為kibana會去調用el的介面; 本文將講解elasticsearch的相關配置和遇到的問題,至於el ...
  • Top12原則: 開發各階段流程及規範 需求、架構、設計、開發、測試等階段流程及規範 需求是基石 總流程 :戰略規劃 3-4年->產品立項-> 用戶調研+競品分析->業務信息 -> 需求分析 -> 指導 開發 與測試規範 -> 標尺【功能清單 + 4 要素: 界面 + 邏輯 + 交互 + 數據】-> ...
  • 'XML添加 Public Sub Add(ID As String, RFSerialnumber As String, Mood As Integer) If reatch(RFSerialnumber) = 1 Then Return End If Dim xmlDoc As New XmlD ...
  • 再用dubbo作為項目架構的時候,給consumer消費者用nginx提供了負載均衡策略和集群的實現, 但是想了下,consumer再多,但是提供者還是一個,最後還不都是落到了這一個provider上面? 舉個列子: 一個飯店有1個後廚在做飯, 前臺有100個點菜的服務員, 100個顧客來點餐,每個 ...
  • 前言 今天我們講的是狀態模式【State Pattern】、這個名字咋一看不好理解,但是仔細一想還是比較容易的。狀態模式重點關註的是狀態。狀態又牽扯著什麼呢?房屋的狀態暫且可以分為出租、簽訂合同、退房。那麼出租對應的是什麼呢?出租狀態代表可以租房。可以租房是一個行為了。所以不難理解的是狀態模式關註的 ...
  • Spring Cloud Stream Srping cloud Bus的底層實現就是Spring Cloud Stream,Spring Cloud Stream的目的是用於構建基於消息驅動(或事件驅動)的微服務架構。Spring Cloud Stream本身對Spring Messaging、S ...
  • 一、對象和引用 1.對象:目前在使用new運算符在堆記憶體中開闢的記憶體空間成為對象。 2.引用:是一個變數,不一定是局部變數,好可能是成員變數,引用保存了記憶體地址,指向了堆記憶體中對象。所有訪問實例的相關數據,都需要通過“引用.”的方式訪問,因為只有通過引用才能找到對象。只有一個空的引用,訪問對象的實例 ...
一周排行
    -Advertisement-
    Play Games
  • Dapr Outbox 是1.12中的功能。 本文只介紹Dapr Outbox 執行流程,Dapr Outbox基本用法請閱讀官方文檔 。本文中appID=order-processor,topic=orders 本文前提知識:熟悉Dapr狀態管理、Dapr發佈訂閱和Outbox 模式。 Outbo ...
  • 引言 在前幾章我們深度講解了單元測試和集成測試的基礎知識,這一章我們來講解一下代碼覆蓋率,代碼覆蓋率是單元測試運行的度量值,覆蓋率通常以百分比表示,用於衡量代碼被測試覆蓋的程度,幫助開發人員評估測試用例的質量和代碼的健壯性。常見的覆蓋率包括語句覆蓋率(Line Coverage)、分支覆蓋率(Bra ...
  • 前言 本文介紹瞭如何使用S7.NET庫實現對西門子PLC DB塊數據的讀寫,記錄了使用電腦模擬,模擬PLC,自至完成測試的詳細流程,並重點介紹了在這個過程中的易錯點,供參考。 用到的軟體: 1.Windows環境下鏈路層網路訪問的行業標準工具(WinPcap_4_1_3.exe)下載鏈接:http ...
  • 從依賴倒置原則(Dependency Inversion Principle, DIP)到控制反轉(Inversion of Control, IoC)再到依賴註入(Dependency Injection, DI)的演進過程,我們可以理解為一種逐步抽象和解耦的設計思想。這種思想在C#等面向對象的編 ...
  • 關於Python中的私有屬性和私有方法 Python對於類的成員沒有嚴格的訪問控制限制,這與其他面相對對象語言有區別。關於私有屬性和私有方法,有如下要點: 1、通常我們約定,兩個下劃線開頭的屬性是私有的(private)。其他為公共的(public); 2、類內部可以訪問私有屬性(方法); 3、類外 ...
  • C++ 訪問說明符 訪問說明符是 C++ 中控制類成員(屬性和方法)可訪問性的關鍵字。它們用於封裝類數據並保護其免受意外修改或濫用。 三種訪問說明符: public:允許從類外部的任何地方訪問成員。 private:僅允許在類內部訪問成員。 protected:允許在類內部及其派生類中訪問成員。 示 ...
  • 寫這個隨筆說一下C++的static_cast和dynamic_cast用在子類與父類的指針轉換時的一些事宜。首先,【static_cast,dynamic_cast】【父類指針,子類指針】,兩兩一組,共有4種組合:用 static_cast 父類轉子類、用 static_cast 子類轉父類、使用 ...
  • /******************************************************************************************************** * * * 設計雙向鏈表的介面 * * * * Copyright (c) 2023-2 ...
  • 相信接觸過spring做開發的小伙伴們一定使用過@ComponentScan註解 @ComponentScan("com.wangm.lifecycle") public class AppConfig { } @ComponentScan指定basePackage,將包下的類按照一定規則註冊成Be ...
  • 操作系統 :CentOS 7.6_x64 opensips版本: 2.4.9 python版本:2.7.5 python作為腳本語言,使用起來很方便,查了下opensips的文檔,支持使用python腳本寫邏輯代碼。今天整理下CentOS7環境下opensips2.4.9的python模塊筆記及使用 ...