设计模式 之 桥接模式

来源:互联网 发布:qq飞车杀人蜂数据 编辑:程序博客网 时间:2024/06/26 02:15

引言:如果鸟会飞,鸵鸟是鸟吗?鸵鸟如何继承鸟类?

如果一定要鸵鸟继承鸟类,可以采用组合的方法,把鸟类中可以被鸵鸟继承的函数挑选出来,而不是类继承,继承是一种强耦合的结构,父变子变,多次继承很可能照成”类爆炸“。组合的一种实现方式就是桥接模式----从多个角度看待同一件事物。

简单代码:

    //鸟类    class bird {        public void eat();        public void sleep();        public void fly();    }    class ostrich {        public void sleep();        public void eat();    }

桥接实例:

以前不同手机有不同型号,不同型号手机里面软件不能再别的手机里面运行 ,不同于现在安卓和ios。


代码:

        //  手机软件    abstract class HandsetSoft {        public abstract void run();    }    //手机游戏    class BandsetGame :HandsetSoft {        public override void run()        {            //throw new NotImplementedException();            Console.WriteLine("运行手机软件游戏");        }            }    //手机通讯录     class HandsetAddressList :HandsetSoft{         public override void run()         {             //throw new NotImplementedException();             Console.WriteLine("运行手机通讯录");         }    }    //手机品牌类     abstract class HandsetBrand {         protected HandsetSoft soft;         //运行手机软件         public void setHandsetSoft(HandsetSoft soft) {             this.soft = soft;         }         public abstract void run();     }    /// <summary>    /// 手机品牌N    /// </summary>     class HandsetBrandN : HandsetBrand {         public override void run()         {             //throw new NotImplementedException();             soft.run();         }     }    /// <summary>    /// 手机品牌M    /// </summary>     class HandsetBrandM : HandsetBrand {         public override void run()         {             //throw new NotImplementedException();             soft.run();         }     }    class Program    {        static void Main(string[] args)        {            HandsetBrand ab;            ab = new HandsetBrandN();            ab.setHandsetSoft(new BandsetGame());            ab.run();            ab.setHandsetSoft(new HandsetAddressList());            ab.run();            ab = new HandsetBrandM();            ab.setHandsetSoft(new BandsetGame());            ab.run();            ab.setHandsetSoft(new HandsetAddressList());            ab.run();            Console.Read();        }    }

运行结果:


1 0
原创粉丝点击