码迷,mamicode.com
首页 > 其他好文 > 详细

桥接模式

时间:2016-05-17 09:43:15      阅读:159      评论:0      收藏:0      [点我收藏+]

标签:

桥接模式就是要解决“多对多”的爆炸性变化问题。

例如:

手机N个
运营商N个
操作系统N个
所以市面上的手机使用者有(手机数量*运营商数量*操作系统数量)个可能性。这对于编程来说是一个非常庞大的变化量
假如你做一个手机网站,模拟市面上的各种品牌手机(苹果、三星、华为、小米。。。。。),各种操作系统(IOS\Android\Winphone),各个运营商(移动、联通、电信、广电),如果你不使用抽像的方法,你需要写的对象是,
各种品牌手机*各种操作系统*各个运营商 ,这将是一个恐怖的代码爆炸,但是你并不需要这么写。你可以把变化点抽取出来。手机,操作系统,运营商,这3个变化点,各自定一个接口。然后在手机上面,桥接另外两个(操作系统、运营商)变化点。具体如何做?

代码:

手机端

    /// <summary>
    /// 手机抽象基类
    /// </summary>
    public abstract class BasePhone
    {
        /// <summary>
        /// 桥接运营商
        /// </summary>
        public IProvider CurrentProvider = null;
        /// <summary>
        /// 桥接操作系统
        /// </summary>
        public ISystem CurrentSystem = null;
        public abstract void Call();
        public abstract void Message();
    }
    /// <summary>
    /// 实现手机基类的抽象
    /// </summary>
    public class Iphone : BasePhone
    {
        public override void Call()
        {
            Console.WriteLine("我正在使用{0}手机、使用{1}网络,使用{2}操作系统打电话", this.GetType(), CurrentProvider.Provider(), CurrentSystem.System());
        }

        public override void Message()
        {
            Console.WriteLine("我正在使用{0}手机、使用{1}网络,使用{2}操作系统发短信", this.GetType(), CurrentProvider.Provider(), CurrentSystem.System());
        }
    }

运营商

    /// <summary>
    /// 抽象运营商
    /// </summary>
    public interface IProvider
    {
        string Provider();
    }
    /// <summary>
    /// 实现运营商抽象
    /// </summary>
    class ChinaMobile : IProvider
    {
        public string Provider()
        {
            return "China Mobile";
        }
    }

操作系统

    /// <summary>
    /// 抽象操作系统
    /// </summary>
    public interface ISystem
    {
        string System();
    }
    /// <summary>
    /// 实现操作系统抽象
    /// </summary>
    public class WinPhone : ISystem
    {
        public string System()
        {
            return "WinPhone";
        }
    }

具体使用:

        static void Main(string[] args)
        {

            BasePhone iphone = new Iphone();
            iphone.CurrentSystem = new Android();
            iphone.CurrentProvider = new ChinaMobile();
            iphone.Call();
            iphone.Message();


            BasePhone xiaomi = new Xiaomi();
            xiaomi.CurrentSystem = new IOSStystem();
            xiaomi.CurrentProvider = new ChinaTelecom();
            xiaomi.Call();
            xiaomi.Message();

            Console.Read();

        }

运行结果:

技术分享

 

总结:

通过桥接模式,我们把 原有的关系:手机数量*运营商数量*操作系统数量,变成了 手机数量+运营商数量+操作系统数量,解决了代码爆炸的问题!

桥接模式

标签:

原文地址:http://www.cnblogs.com/lystory/p/5500240.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!