桥接模式
Posted 梦
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了桥接模式相关的知识,希望对你有一定的参考价值。
桥接模式就是要解决“多对多”的爆炸性变化问题。
例如:
手机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(); }
运行结果:
总结:
通过桥接模式,我们把 原有的关系:手机数量*运营商数量*操作系统数量,变成了 手机数量+运营商数量+操作系统数量,解决了代码爆炸的问题!
以上是关于桥接模式的主要内容,如果未能解决你的问题,请参考以下文章