首页 > 代码库 > 桥接模式

桥接模式

桥接模式应用:当应该m和n变化就需要建立m*n个类。

利用桥接我们封装变化,就只需要建立M+N个类

主方法

namespace 桥接模式
{
    /// <summary>
    /// 桥接模式:
    /// 当我们需要小米ios、小米安卓、苹果ios、苹果安卓手机的时候,对应要件4个类。
    /// 这个时候我们分析手机和操作系统是变化的,需要建m*n个类(m:手机品牌个数 n:系统个数)
    /// 
    /// 这个时候我们可以封装变化
    /// 在手机中定义一个系统字段,外部来赋值,这样就只用建m+n个类
    /// </summary>
    class Program
    {
        static void Main(string[] args)
        {
            //苹果的ios系统手机
            BasePhone iphone = new Iphone();
            iphone.system = new IOS().GetSystem();
            iphone.Call();
            iphone.Message();


            //小米的ios系统手机
            BasePhone xiaoMi = new XiaoMi();
            xiaoMi.system = new IOS().GetSystem();
            xiaoMi.Call();
            xiaoMi.Message();

            //小米的安卓系统手机
            BasePhone xiaoMi = new XiaoMi();
            xiaoMi.system = new Android().GetSystem();
            xiaoMi.Call();
            xiaoMi.Message();
            Console.ReadKey();
        }
    }
}

新建手机类

namespace 桥接模式
{
    public abstract class BasePhone
    {
        public string system = null;
        public abstract void Call();
        public abstract void Message();
    }
}

    public class Iphone:BasePhone
    {
        public override void Call()
        {
            Console.WriteLine("我这个是{0}手机,用的是{1}操作系统来{2}", this.GetType().Name, base.system, new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name);
        }

        public override void Message()
        {
            Console.WriteLine("我这个是{0}手机,用的是{1}操作系统来{2}", this.GetType().Name, base.system, new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name);
        }
    }

    public class XiaoMi:BasePhone
    {
        public override void Call()
        {
            Console.WriteLine("我这个是{0}手机,用的是{1}操作系统来{2}", this.GetType().Name, base.system, new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name);
        }

        public override void Message()
        {
            Console.WriteLine("我这个是{0}手机,用的是{1}操作系统来{2}", this.GetType().Name, base.system, new System.Diagnostics.StackTrace().GetFrame(0).GetMethod().Name);
        }
    }

新建系统类

namespace 桥接模式
{
    public interface ISystem
    {
        string GetSystem();
    }
}

    public class IOS:ISystem
    {
        public string GetSystem()
        {
            return this.GetType().Name;
        }
    }

    public class Android:ISystem
    {
        public string GetSystem()
        {
            return this.GetType().Name;
        }
    }

 

桥接模式