桥接模式-不同的场合说不同的话

桥接模式比喻
早上碰到MM,要说早上好,晚上碰到MM,要说晚上好;碰到MM穿了件新衣服,要说你的衣服好漂亮哦,碰到MM新做的发型,要说你的头发好漂亮哦。不要问我“早上碰到MM怎么说晚上好”这种问题,自己用BRIDGE组合一下不就行了。这就是桥接模式了!

桥接模式意图
桥接模式(Bridge)将抽象部分与它的实现部分分离,使它们都可以独立地变化。

桥接模式类图
 

www.zhuli8.com-朱利IT博客

桥接模式实现
    /// <summary>
    /// 我要说的话的抽象
    /// </summary>
    abstract class Bloger
    {
        public abstract void Greet();
    }

    /// <summary>
    /// 我说:早上好!
    /// </summary>
    class MorningImp : Bloger
    {
        public override void Greet()
        {
            Console.WriteLine("早上好!");
        }
    }

    /// <summary>
    /// 我说:晚上好
    /// </summary>
    class NightImp:Bloger
    {
        public override void Greet()
        {
            Console.WriteLine("晚上好!");
        }
    }

    /// <summary>
    /// 我说:你的衣服好漂亮哦!
    /// </summary>
    class ClothesImp : Bloger
    {
        public override void Greet()
        {
            Console.WriteLine("你的衣服好漂亮哦!");
        }
    }

    /// <summary>
    /// 我说:你的头发好漂亮哦!
    /// </summary>
    class HeadformImp : Bloger
    {
        public override void Greet()
        {
            Console.WriteLine("你的头发好漂亮哦!");
        }
    }

    /// <summary>
    /// 遇到MM的时机
    /// </summary>
    class Opportunity
    {
        protected Bloger imp;
        public void SetImp(Bloger imp)
        {
            this.imp = imp;
        }

        public virtual void ShowGreet()
        {
            Console.Write("遇见女生的场合:");
            imp.Greet();
        }
    }

    /// <summary>
    /// 时机:早上
    /// </summary>
    class Morning : Opportunity
    {
        public override void ShowGreet()
        {
            Console.Write("早上碰到MM:");
            imp.Greet();
        }
    }

    /// <summary>
    /// 时机:晚上
    /// </summary>
    class Night : Opportunity
    {
        public override void ShowGreet()
        {
            Console.Write("晚上碰到MM:");
            imp.Greet();
        }
    }

    /// <summary>
    /// 时机:碰到MM穿了件新衣服
    /// </summary>
    class Clothes : Opportunity
    {
        public override void ShowGreet()
        {
            Console.Write("碰到MM穿了件新衣服:");
            imp.Greet();
        }
    }

    /// <summary>
    /// 时机:碰到MM新做的发型
    /// </summary>
    class Headform : Opportunity
    {
        public override void ShowGreet()
        {
            Console.Write("碰到MM新做的发型:");
            imp.Greet();
        }
    }

    /// <summary>
    /// 桥接模式客户端应用
    /// </summary>
    class Program
    {
        static void Main(string[] args)
        {
            //时机:早上
            Opportunity m = new Morning();
            //我说:早上好!
            m.SetImp(new MorningImp());
            m.ShowGreet();

            //时机:晚上
            Opportunity n = new Night();
            //我说:晚上好!
            n.SetImp(new NightImp());
            n.ShowGreet();

            //时机:碰到MM穿了件新衣服
            Opportunity c = new Clothes();
            //我说:你的衣服好漂亮哦!
            c.SetImp(new ClothesImp());
            c.ShowGreet();

            //时机:碰到MM新做的发型
            Opportunity h = new Headform();
            //我说:你的头发好漂亮哦!
            h.SetImp(new HeadformImp());
            h.ShowGreet();

            //时机:早上
            Opportunity o=new Morning();
            //由于紧张,早上碰到MM竟然说了句"晚上好!",丢人啊!
            o.SetImp(new NightImp());
            o.ShowGreet();

            Console.Read();
        }
    }

桥接模式总结
早上碰到MM,要说早上好的实现就是把早上遇到MM的时机和我要说的话组合起来就可以了。同样的,早上遇到MM我也可以说晚上好,那就是把早上的时机和我要说的话:“晚上好”组合起来就可以了。桥接模式体现着合成/聚合复用原则,聚合表示一种弱的拥有关系,体现着AasB;合成则是一种强的拥有关系,体现着严格的部分和整体的关系,部分和整体的生命周期一样,体现着AisB,尽量使用合成/聚合,尽量不要使用类继承。

朱利IT博客原创博文:文章地址:http://www.zhuli8.com/sjms/bridge.html

转载于:https://www.cnblogs.com/muzizhu/archive/2012/01/14/2322370.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值