• 结构型模式:桥接(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);
            }
        }
    }

    效果:

    (可以应对一些小变化)

     

     

  • 相关阅读:
    Jquery(智能感知AJAX,从后台调数据)
    jQuery插件(输入关键字出现提示,并可查询)
    设置缓存失效的三种方法
    关于fluorinefx基础和服务器搭建的文章地址
    关于过河问题的感悟
    .net 大文件上传
    iis7中运行cmd
    学习总结
    C#开源资源项目(转载)
    HTML数据提取
  • 原文地址:https://www.cnblogs.com/jiejue/p/2713010.html
Copyright © 2020-2023  润新知