现在的位置: 首页 > 综合 > 正文

设计模式之Bridge模式(3)

2013年02月14日 ⁄ 综合 ⁄ 共 1963字 ⁄ 字号 评论关闭

仿照<java与模式>中bridge模式的例子自己改写的一个例子:
有N个飞机制造商(AirBus.....),每个飞机制造商有客机(PassenagerPlane)和货机(CargoPlane).....实现代码如下:
1.飞机制造商抽象接口:

    interface IAirPlaneMaker
    {
        string name get;} //制造商名称
        IAirPlane producePass(); //生产一量客机
         //生产一两货机
    }

2.飞机抽象接口

interface IAirPlane
    {
        void Fly(); //飞行方法
        IAirPlaneMaker maker get;set;} //制造商
    }

3.飞机制造商的一个实现

class AirBus : IAirPlaneMaker
    {
        private string _name = "AirBus company";

        #region IAirPlaneMaker Members

        public string name
        {
            get
            {
                return this._name;
            }

        }


        public IAirPlane producePass()
        {
            IAirPlane pass = new PassengerPlane();
            pass.maker = this;

            return pass;
        }


        #endregion

    }

4 飞机的实现

class PassengerPlane : IAirPlane
    {
        private IAirPlaneMaker _maker;

        #region IAirPlane Members

        public void Fly()
        {
            System.Console.WriteLine("The " + _maker.name + "'s PassenterPlane is flying~~~!");
        }


        public IAirPlaneMaker maker
        {
            get
            {
                return this._maker;
            }

            set
            {
                this._maker = value;
            }

        }


        #endregion

    }


    class CargoPlane : IAirPlane
    {
        private IAirPlaneMaker _maker;

        #region IAirPlane Members

        public void Fly()
        {
            System.Console.WriteLine("The " + _maker.name + "'s CargoPlane is flying~~~!");
        }


        public IAirPlaneMaker maker
        {
            get
            {
                return this._maker;
            }

            set
            {
                this._maker = value;
            }

        }


        #endregion

    }

5 通过这种bridge模式,客户端代码非常简洁

 IAirPlaneMaker maker = new AirBus();
            IAirPlane passPlane = maker.producePass();
            passPlane.Fly();


考虑:飞机制造商中生产飞机的方式不是很好,藕合度太高,如果要新增加一种飞机生产,则必须改变制造商接口极其所有实现子类。考虑使用工厂模式实现。。。。。

抱歉!评论已关闭.