zoukankan      html  css  js  c++  java
  • 结构型模式:桥接(Bridge)

    我一直想用我自己的想法搞明白的问题就是:这些【设计模式的名字】传达了【设计模式本身】的多少意思和多少内涵。

    对于桥接(Bridge)来说,我想弄清的就是:桥在哪里?

     

    故事:

      当你买了一双鞋,不太满意的时候,你会想去退货或者换一双。当然很多鞋店/鞋厂会提供这样的服务。

     

    建模:

      一双你不满意的鞋子 (敏捷之靴?)

      你,想退换。(退给他们之后,他们怎么搞你不管)

      退 OR 换,这是一个问题。

     

    类图:

    主观意识上,把那个隐形的桥当做主角就成。对自己说三遍:它是主角,它是主角!桥的这边和那边各有一个配角:Left?-> Right。

    实现:

    Abstraction

    namespace Bridge
    {
        public class Abstraction
        {
            private Implementor imp;
            public void Operation(string need)
            {
                switch (need)
                {
                    case "Change":
                        imp = new Change();
                        imp.Operation();
                        break;
                    case "Cancel":
                        imp = new Cancel();
                        imp.Operation();
                        break;
                    default:
                        Console.WriteLine("不可操作");
                        break;
                }
            }            
        }
    }

    Implementor

    namespace Bridge
    {
        public class Implementor
        {
            public virtual void Operation()
            {
                Console.WriteLine("开始为你服务");
            }
        }
    }

    Change

    namespace Bridge
    {
        public class Change:Implementor
        {
            private void register()
            {
                Console.WriteLine("登记更换");
            }
            private void change()
            {
                Console.WriteLine("正在更换");
            }
    
            private void success()
            {
                Console.WriteLine("更换成功");
            }
    
            public override void Operation()
            {
                base.Operation();
                register();
                change();
                success();
            }
        }
    }

    Cancel

    namespace Bridge
    {
        public class Cancel:Implementor
        {
            private void cancel()
            {
                Console.WriteLine("正在退货");
                Console.WriteLine("退货成功");
            }
            public override void Operation()
            {
                base.Operation();
                cancel();
            }
        }
    }

    Program

    namespace Bridge
    {
        class Program
        {
            static void Main(string[] args)
            {
                Shoes shoes = new Shoes();
    
                Console.WriteLine("不满意?请输入你想进行的操作:Change/Cancel");
                string need = Console.ReadLine();
                Abstraction bridge = new Abstraction();
                bridge.Operation(need);
            }
        }
    }

    效果:

    (可以应对一些小变化)

     

     

  • 相关阅读:
    jvm 优化
    SqlServer体系结构
    sqlserver2012 在视图中建索引
    win10 桌面设置为远程桌面
    ORACLE 查询某表中的某个字段的类型,是否为空,是否有默认值等
    activemq读取剩余消息队列中消息的数量
    Oracl 一条sql语句 批量添加、修改数据
    ClickOnce一项Winform部署
    C#语言中的修饰符
    关于MySQL集群的一些看法
  • 原文地址:https://www.cnblogs.com/jiejue/p/2713010.html
Copyright © 2011-2022 走看看