设为首页收藏本站

LUPA开源社区

 找回密码
 注册
文章 帖子 博客
LUPA开源社区 首页 业界资讯 技术文摘 查看内容

看老外程序员如何向妻子解释设计模式

2013-5-16 11:16| 发布者: 红黑魂| 查看: 3274| 评论: 0|来自: CSDN

摘要: 设计模式是什么?设计模式是这些原则在某些特定公共场景下标准化的应用,接下来让我们通过一些例子学习什么是设计模式。Farhana: 当然,我喜欢例子。Shubho: 让我们以汽车为例讨论一下。汽车是一个很复杂的对象,由成 ...
复制代码

Farhana: 明白。开关的On()方法应当内部调用电器的TurnOn()方法,Off()方法应当内部调用TurnOff()方法,所以开关类Switch应如下:

复制代码
    public class Switch {        public IElectricalEquipment equipment {            get;            set;        }        public void On() {            Console.WriteLine("开关打开");            equipment.PowerOn();        }        public void Off() {            Console.WriteLine("开关关闭");            equipment.PowerOff();        }    }
复制代码

Shubho: 很好。这自然允许你把风扇从一个开关接到另一个上。不过你看,反过来也可以。这意味着你可以改变风扇或电灯的开关而不需要碰到风扇或电灯。例如,你可以很轻松的把点灯的开关从FancySwitch换到NormalSwitch上,如下:

            normalSwitch.equipment = light;            normalSwitch.On(); //打开电灯            normalSwitch.Off(); //关闭电灯
你看,连接一个抽象电器到一个开关(通过封装)能够让你改变开关和电器而不会对对方产生影响。这个设计是优雅的,良好的。四人组为该模式取名为:桥接模式。

Farhana: 太棒了。我想我明白这个了。从根本上说,两个系统不应当直接联系或依赖与对方。 当然,他们应该联系或依赖于抽象(如依赖倒置原则和开放闭合原则所讲),所以他们是松耦合的,因此我们可以在需要时改变我们的实现而不会对系统其他部分产生过多影响。

Shubho: 你理解了,亲爱的.我们看下桥接模式的定义:

"将抽象部分与实现部分分离,使它们都可以独立的变化"

你看我们的实现完美遵循该定义。如果你有一个类设计器(如Visual Studio或其他支持该功能的IDE环境),你会看到类似的如下类图:

桥接模式类图

在这里, Abstraction 是开关基类SwitchRefinedAbstraction 是具体开关类 (FancySwitch,NormalSwitch 等等。)。 Implementor 是电器接口IElectricalEquipmentConcreteImplementorA 和ConcreteImplementorB 是电灯类Light和风扇类Fan

Farhana: 问你个问题,只是好奇啊。如你所说有很多其他的设计模式,为什么你以桥接模式开始呢?有重要原因吗?

Shubho: 这个问题很好。是的,我以桥接模式而不以其他开始是因为一个理由。我认为桥接模式是所有面向对象模式的基础。理由如下:

  • 它教导如何思考抽象,这是面向对象设计模式的关键概念。
  • 它实现了基本的OOD原则。
  • 它容易理解。
  • 如果正确理解该模式,学习其他模式会很容易。

Farhana: 你认为我理解的对吗?

Shubho: 我认为你理解的非常正确。

Farhana: 那么接下来是什么?

Shubho: 通过理解桥接模式,我们仅仅是开始理解设计模式的思想。在我们接下的对话中,我们将会学习其他的设计模式,我希望你不会觉得它们无聊。

Farhana:不会的,相信我。


http://blog.csdn.net/tigerdsh/article/details/8885908


酷毙

雷人

鲜花

鸡蛋

漂亮
  • 快毕业了,没工作经验,
    找份工作好难啊?
    赶紧去人才芯片公司磨练吧!!

最新评论

关于LUPA|人才芯片工程|人才招聘|LUPA认证|LUPA教育|LUPA开源社区 ( 浙B2-20090187 浙公网安备 33010602006705号   

返回顶部