Façade外觀(結構型模式)

來源:互聯網
上載者:User

系統的複雜度
      假設我們需要開發一個坦克類比系統用於類比坦克車在各種作戰環境中的行為,其中坦克系統由引擎、控制器、車輪、車身等各子系統構成。
public class Wheel
{
public void WAction1() {....}
public void WAction2() {....}
}
public class Engine
{
public void EAction1() {....}
public void EAction2() {....}
}
public class Bodywork
{
public void BAction1() {....}
public void BAction2() {....}
}
public class Controller
{
public void CAction1() {....}
public void CAction2() {....}
}

 

如何使用這樣的系統
A方案                                                                                                                   B方案

 

 

動機(Motivation)
      上述A方案的問題在於組件的客戶和組件中各種複雜的子系統有了過多的耦合,隨著外部客戶程式和各子系統的演化,這種過多的耦合面臨很多變化的
挑戰。
      如何簡化外部客戶程式和系統間的互動介面?如何將外部客戶程式的演化和內部子系統的變化之間的依賴相互解耦?

意圖(Intent)
      為子系統中的一組介面提供一個一致的介面,Façade模式定義了一個高層介面,這個介面使得這一子系統更加容易使用。——《設計模式》GoF

結構(Structure)

 

範例程式碼

代碼

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Collections;

namespace testWpf
{
    internal class Whell
    {
        public void WAction1()
        { 
        }

        public void WAction2()
        { 
        }
    }

    internal class Engine
    {
        public void EAction1()
        { 
        }

        public void EAction2()
        { 
        }
    }

    internal class Bodywork
    {
        public void BActino1()
        { 
        }

        public void Baction2()
        { 
        }
    }

    internal class Controller
    {
        public void CActino1()
        {
        }

        public void Caction2()
        {
        }    
    }

    //Facade
    public class TankFacade 
    {
        Whell[] whells = new Whell[4];
        Engine[] engines = new Engine[4];
        Bodywork bodywork = new Bodywork();
        Controller controller = new Controller();

        public void Start()
        {
            //...
        }

        public void Run()
        {
        }

        public void Shot()
        {
        }

    }

}

   

Facade模式的幾個要點

  1. 從客戶程式的角度來看, Facade模式不僅簡化了整個組件系統的介面,同時對於組件內部與外部客戶程式來說,從某種程度上也達到了一種“解耦”的效果——內部子系統的任何變化不會影響到Façade介面的變化。
  2. Façade設計模式更注重從架構的層次去看整個系統,而
    不是單個類的層次。Façade很多時候更是一種架構設計
    模式。
  3. 注意區分Façade模式、Adapter模式、Bridge模式與Decorator模式。Façade模式注重簡化介面,Adapter模式注重轉換介面,Bridge模式注重分離介面(抽象)與其實現,Decorator模式注重穩定介面的前提下為對象擴充功能。
相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.