-facade模式

    /*

     * 案例場景:

     * 遊戲中需要開發一個坦克,該坦克在各種作戰環境中使用【具有不同的行爲】,其中,坦克有引擎、控制器、車身、車輪等組成。

     * 在某些中作戰環境,可能和坦克的引擎、控制器關聯,而在另外一種作戰環境下,可能可坦克的車輪和車身關聯。也就是所,

     * 外部環境和坦克內部部件直接耦合,耦合度緊密。

     *

     * Facade模式:爲坦克所有部件提供一個統一的接口,外部環境直接調用統一接口,從而實現統一處理。

     *

     * 問題分析:

     * 組件的客戶[外部環境]和組件[坦克]中複雜子系統的過多耦合,隨着外部客戶程序【外部環境】和子系統【坦克部件】的演變,

     * 這種過多的耦合面臨很多變化挑戰【內外需要兼顧,才能完成修改;外部環境修改,必須瞭解內部結構】。

     *

     * Facade模式簡單,應用廣泛。

     *

     * 意圖:

     * 爲子系統的一組接口提供一個一致的界面。

     * Facade模式定義

     *

     */

 

    internal class Engine   //internal表示爲內部類,不對外開放。

    {

        public void EAction1()

        {

        }

        public void EAction2()

        {

        }

    }

    internal class Controler

    {

        public void CAction1()

        {

        }

        public void CAction2()

        {

        }

    }

    internal class BodyWork

    {

        public void BWAction1()

        {

        }

        public void BWAction2()

        {

        }

    }

    internal class Wheel

    {

        public void WAction1()

        {

        }

        public void WAction2()

        {

        }

    }

    internal class Weapen

    {

        public void WAction1()

        {

        }

        public void WAction2()

        {

        }

    }

 

   

    //外觀

    public class TankFacade

    {

        Wheel[] wheels = new Wheel[4];

        BodyWork bodyWork = new BodyWork();

        Engine[] engines = new Engine[4];

        Controler controler = new Controler();

        Weapen weapen = new Weapen();

 

        public void Start()

        {

            //只和引擎,控制器,車輪,車身相關

        }

        public void Shot()

        {

            //只和引擎,控制器,武器相關

        }

        public void Stop()

        {

            //只和引擎,控制器,車輪,車身相關

        }

        public void Run()

        {

            //只和引擎,控制器,車輪,車身相關

        }

    }

 

    /*Facade模式:

     * 不僅簡化了整個組件系統的接口,同時,對於組件內部和外部程序來說,從某種程度上也達到一種“解耦”的效果。

     * Facade設計模式更注重從架構層次上去看整個系統,而不是單個類的層次。

     *

     * 模式比較:

     * Facade:注重“簡化接口”,或者說提供統一接口。【注意類的單一職責】

     * Adapter:注重“轉換接口”,現存對象適配到新的環境中。

     * Bridge:注重分離接口(抽象)與實現,使得他們可以獨立的變化。如:坦克兩個維度變化的分離。

     * Decorator:注重“穩定接口”前提下,爲對象擴展功能。如:不同型號下,功能的擴展,避免了子類的膨脹。

     */

    class Facade

    {

        public static void Main()

        {

            TankFacade tank = new TankFacade();

            tank.Shot();

            tank.Run();

            /*

             * 由此,外部調用坦克工作時,如啓動,射擊,都不和坦克的內部部件相關聯,很好的封裝了內部細節。

             *

             */

        }

    }

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 
發佈了79 篇原創文章 · 獲贊 1 · 訪問量 11萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章