我一直想用我自己的想法搞明白的问题就是:这些【设计模式的名字】传达了【设计模式本身】的多少意思和多少内涵。
对于桥接(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); } } }
效果:
(可以应对一些小变化)