zoukankan      html  css  js  c++  java
  • 设计模式(8)---桥接模式

    定义:

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

    解释:抽象与它的实现分离并不是说让抽象类与其派生类分离,而是抽象类和它的派生类用来实现自己的对象。

    UML类图和基本代码:

    class Program
        {
            static void Main(string[] args)
            {
                Abstration ab = new RefinedAbstration();
    
                ab.SetImplementor (new ConcreteImplementorA ());
                ab.Operation();
    
                ab.SetImplementor(new ConcreteImplementorB());
                ab.Operation();
    
                Console.Read();
            }
        }
    
        abstract class Implementor
        {
            public abstract void Operation();
        }
    
        class ConcreteImplementorA : Implementor
        {
            public override void Operation()
            {
                Console.WriteLine("implement A action");
            }
        }
    
        class ConcreteImplementorB : Implementor
        {
            public override void Operation()
            {
                Console.WriteLine("implement B action");
            }
        }
    
        class Abstration
        {
            protected Implementor implementor;
    
            public void SetImplementor(Implementor implementor)
            {
                this.implementor = implementor;
            }
    
            public virtual void Operation()
            {
                implementor.Operation();
            }
        }
    
        class RefinedAbstration : Abstration
        {
            public override void Operation()
            {
                implementor.Operation();
            }
        }
    View Code

    在网上看到一个实例,感觉非常贴切,”拿来主义“参考学习。

    具体是:现实生活中实现遥控器,遥控器中并不包含开机、关机、换台等功能的实现,遥控器只是包含了电视机上的这些功能的引用,然后红外线去找到电视机上对应功能的实现。

    抽象类电视机及生成长虹、三星电视机:

    public abstract class TV
        {
            public abstract void On();
            public abstract void Off();
            public abstract void TurnChannel();
        }
    
        public class ChangHong : TV
        {
            public override void On()
            {
                Console.WriteLine("长虹牌电视机已经打开了");
            }
    
            public override void Off()
            {
                Console.WriteLine("长虹牌电视机已经关掉了");
            }
    
            public override void TurnChannel()
            {
                Console.WriteLine("长虹牌电视机换频道");
            }
        }
    
        public class Samsung : TV
        {
            public override void On()
            {
                Console.WriteLine("三星牌电视机已经打开了");
            }
    
            public override void Off()
            {
                Console.WriteLine("三星牌电视机已经关掉了");
            }
    
            public override void TurnChannel()
            {
                Console.WriteLine("三星牌电视机换频道");
            }
        }
    View Code

     抽象类遥控器及实现:

    public class RemoteControl
        {
            private TV implementor;
            public TV Implementor
            {
                get { return implementor; }
                set { implementor = value; }
            }
    
            public virtual void On()
            {
                implementor.On();
            }
    
            public virtual void Off()
            {
                implementor.Off();
            }
    
            public virtual void TurnChannel()
            {
                implementor.TurnChannel();
            }
        }
    
        public class ConcreteRemote : RemoteControl
        {
            
        }
    View Code

    客户端调用:

    RemoteControl remoteControl = new ConcreteRemote();
    
                remoteControl.Implementor = new ChangHong();
                remoteControl.On();
                remoteControl.Off();
                remoteControl.TurnChannel();

    优点:

    抽象接口与实现解耦。

    抽象和实现都可以独立扩展,不会影响到对方。

    缺点:

    增加了系统的复杂度。

    适用场景:

    一个类存在两个独立变化的维度,且两个维度都需要进行扩展。

    需要跨越多个平台的图形和窗口系统。

  • 相关阅读:
    2019年6月英语四六级试题及答案和视频教程
    经典解压缩软件 WinRAR 5.90 sc 官方去广告版
    会动的边框
    萌萌达机器人
    背景图片跟随鼠标动
    烟花代码
    常用正则表达式
    计算器
    顶部下啦菜单
    ps用画笔工具设计水墨圆环
  • 原文地址:https://www.cnblogs.com/ysyn/p/4036545.html
Copyright © 2011-2022 走看看