C#物件導向設計模式學習筆記(10) – Facade 面板模式(結構型模式)

來源:互聯網
上載者:User

上述A方案的問題在於組件的客戶和組件中各種複雜的子系統有了過多的耦合,隨著外部客戶程式和各子系統的演化,這種過多的耦合面臨很多變化的挑戰。

如何簡化外部客戶程式和系統間的互動介面?如何將外部客戶程式的演化和內部子系統的變化之間的依賴相互解耦?

 

意圖

為子系統中的一組介面提供一個一致的介面,Façade模式定義了一個高層介面,這個介面使得這一子系統更加容易使用。

 

 

using System;

internal class Wheel
{
public void WAction1() { }
public void WAction2() { }
}

internal class Engine
{
public void EAction1() { }
public void EAction2() { }
}

internal class Bodywork
{
public void BAction1() { }
public void BAction2() { }
}

internal class Controller
{
public void CAction1() { }
public void CAction2() { }
}

public class TankFacade
{
Wheel[] wheels = new Wheel[4];
Engine[] engines = new Engine[4];
Bodywork bodywork = new Bodywork();
Controller controller = new Controller();

public void Start() { }
public void Stop() { }
public void Run() { }
public void Shot() { }
}

 

要點:

1、從客戶程式的角度來看,Facade模式不僅簡化了整個組件系統的介面,同時對於組件內部與外部客戶程式來說,從某種程度上也達到了一種“解耦”的效果——內部子系統的任何變化不會影響到Façade介面的變化;

2、Fa c ade設計模式並非一個集裝箱,可以任意地放進任何多個對象。Facade模式中組件的內部應該是“相互耦合關係比較大的一系列組件”,而不是一個簡單的功能集合;

3、注意區分Facade模式、Adapter模式、Bridge模式與Decorator模式。

Facade模式注重簡化介面

Adapter模式注重轉換介面

Bridge模式注重分離介面(抽象)與其實現

Decorator模式注重穩定介面的前提下為對象擴充功能

適用性: 

1、為一個複雜子系統提供一個簡單介面;

2、提高子系統的獨立性;

3、在層次化結構中,可以使用Facade模式定義系統中每一層的入口。

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.