设为首页收藏本站

LUPA开源社区

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

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

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

摘要: 设计模式是什么?设计模式是这些原则在某些特定公共场景下标准化的应用,接下来让我们通过一些例子学习什么是设计模式。Farhana: 当然,我喜欢例子。Shubho: 让我们以汽车为例讨论一下。汽车是一个很复杂的对象,由成 ...
这里的两个具体类有自己的特征和行为,只是此时此刻,我们简单化以下。

Shubho: 非常棒,接下来电灯和风扇怎么办?

Farhana: 我试试. 根据OODP的开放闭合原则,我们知道只要可能,就应该尝试抽象,对吗?

Shubho: 对

Farhana: 跟开关不一样,风扇和电灯等是两种不同的事物。对于开关,我们能够使用一个开关基类Switch,但风扇和电灯是两个不同的事物,相比定义一个基类,接口可能更合适。一般来说,他们都是电器。所以我们可以定义一个接口,如IElectricalEquipment,作为对电灯和风扇的抽象,可以吗?

Shubho: 可以

Farhana: 好,每种电器都有些相同的功能。他们能够打开和关闭。所以接口可能如下:

    public interface IElectricalEquipment {        void PowerOn(); //每种电器都能打开        void PowerOff(); //每种电器都能关闭    }
Shubho: 太好了,你很善于抽象东西。现在我们需要一座桥梁。在现实中,电线是桥梁。在我们对象设计中,开关知道如何打开和关闭电器,电器以某种方式联系到开关。这里我们没有电线,让电器连接到开关的唯一方式是封装。

Farhana: 是的,但开关不能直接知道风扇或电灯。开关应当知道一个电器IElectricalEquipment能够打开或关闭。这意味着,ISwitch应该有一个IElectricalEquipment实例,对吗?

Shubho: 对,对风扇或电灯的封装的实例是一个桥梁。所以让我们修改Switch类以便封装一个电器:

复制代码
    public class Switch {        public IElectricalEquipment equipment {            get;            set;        }        public void On() {            //开关打开        }        public void Off() {            //开关关闭        }    }
复制代码
Farhana: 明白。让我们定义真实的电器:风扇和电灯。如我所见,一般来说它们都是电器,所以它们都简单实现了IElectricalEquipment接口。

下面是风扇类:

复制代码
    public class Fan : IElectricalEquipment {        public void PowerOn() {            Console.WriteLine("风扇打开");        }        public void PowerOff() {            Console.WriteLine("风扇关闭");        }    }
复制代码

下面是电灯类:

复制代码
    public class Light : IElectricalEquipment {        public void PowerOn() {            Console.WriteLine("电灯打开");        }        public void PowerOff() {            Console.WriteLine("电灯关闭");        }    }
复制代码

Shubho:太好了。现在让开关工作。当开关打开关闭的时候它应当能够打开关闭电器(它连接到的) 。

这里的关键点是:

  • 当开关按下开时,连接的电器也应该打开。
  • 当开关按下关时,连接的电器也应该关闭。

大致的代码如下:

复制代码
        static void Main(string[] args) {            //构造电器设备:风扇,开关            IElectricalEquipment fan = new Fan();            IElectricalEquipment light = new Light();            //构造开关            Switch fancySwitch = new FancySwitch();            Switch normalSwitch = new NormalSwitch();            //把风扇连接到开关            fancySwitch.equipment = fan;            //开关连接到电器,那么当开关打开或关闭时电器应该打开/关闭            fancySwitch.On();            fancySwitch.Off();            //把电灯连接到开关            fancySwitch.equipment = light;            fancySwitch.On(); //打开电灯            fancySwitch.Off(); //关闭电灯        }

酷毙

雷人

鲜花

鸡蛋

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

最新评论

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

返回顶部