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

效果:

(可以应对一些小变化)

 

 

posted on 2012-10-06 15:35  caigen  阅读(967)  评论(0编辑  收藏  举报