-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();

            /*

             * 由此,外部调用坦克工作时,如启动,射击,都不和坦克的内部部件相关联,很好的封装了内部细节。

             *

             */

        }

    }

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值