欢迎来到天天文库
浏览记录
ID:40297497
大小:837.50 KB
页数:25页
时间:2019-07-30
《Head First Design Patterns(深入浅出设计模式)-设计模式介绍》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、HeadFirstDesignPatterns(深入浅出设计模式)-设计模式介绍1. WelcometoDesignPatterns-设计模式介绍现在我们要住进对象村(Objectville),我们刚刚开始接触设计模式…每个人都在使用它们。一会我们将去参加Jim和Betty的星期三晚上的模式聚会!有人已经解决了你的问题。在这章里,你将学习到为什么(和怎么样),你将学习到那些幸存下来的开发者的智慧和教训,他们都曾经历过类似的设计问题。在我们做之前,我们将先看看设计模式的用途和好处,再看一些关键的面向对象设计原则,并且再通过一个实例了解模式的工作方式。使用模式最好的方法就
2、是把它们装入脑袋里,然后在你设计和现有的应用程序里找到你能够应用它们的地方。相对于代码重用,使用模式你获得了经验的重用。 -1- 从一个简单的模拟鸭子程序开始乔为一个制造非常成功的模拟鸭子池塘游戏(SimUDuck)的公司工作。这个游戏可以展示很多种鸭子的游泳方式和呷呷叫声。系统最初的设计者们使用了标准的面向对象技术,他们创建了一个Duck基类供所有其它类型的鸭子继承。去年,竞争者们给公司带来了越来越多的压力。经过历时一周在高尔夫球赛场上的集体讨论,公司的经理们都觉得该是进行一次大改革的时候了。他们需要在下周在毛伊岛举行的股东大会上展示一些真正给人深刻印象的东西。 -2-
3、但是我们现在需要鸭子可以飞经理们确定会飞的鸭子就是模拟器需要的用来击败其他竞争者的东西。当然,乔的经理告诉他们,对于乔来说在一周内迅速搞定这些根本不是问题。“毕竟”,乔的上司说,“他是一个面向对象的程序员…那些有什么难的呢?”乔想:我仅仅只需要在Duck类里增加fly()方法,然后所有其他鸭子就都可以继承它了。现在是展示我真正的面向对象才华的时候了。 -3- 但是有些事情严重错误了…乔的上司:乔,我正在股东大会上。他们刚看完演示,很多橡皮鸭子在屏幕上四处乱飞。这是你在开玩笑吗?…发生了什么事?乔没有注意到并不是所有Duck的子类都需要fly()方法。当乔给Duck基类增加新
4、行为的时候,他也同时给那些不需要这些行为的Duck的子类增加了。现在他的SimUDuck程序里有了会飞的不存在的东西。局部的代码更新导致了非局部的效果(会飞的橡皮鸭子)!乔想:好吧,我的设计有一点小缺陷。我不明白为什么他们不能只部分调用它。…他在想为什么在维护系统的时候无法使用继承来实现重用的目的。 -4- 乔在考虑继承…乔想:我可以总是在橡皮鸭子里覆盖fly()方法,同样的方式对于quack()方法…乔想:但是当我们在系统里增加木头鸭子的时候会怎么样呢?它们既不会飞也不会呷呷叫… 下面那些是使用继承来给Duck增加行为的不利条件?(可多选)A. 代码在子类间被复制B
5、. 很难在运行时改变行为C. 我们不能让鸭子跳舞D. 很难得到所有鸭子的行为E. 鸭子不能在同一时间飞和呷呷叫F. 变动会无意间影响其他鸭子 -5- 利用接口(interface)怎么样?乔认识到继承或许并不是办法,因为他刚得到消息说经理们现在想每六个月更新一次产品(他们还没有想好更新什么)。乔知道那样意味着不断变化,并且他将被迫检查所有将来增加到程序里的Duck的子类,可能还要覆盖它们的fly()方法和quack()方法。乔想:我可以把fly()从Duck基类里拿出来,然后创建一个有fly()方法的Flyable()接口。这样,只有那些需
6、要飞的鸭子才会通过实现这个接口来获得fly()方法…并且,我想最好再创建一个Quackable接口,因为并不是所有的鸭子都会呷呷叫。你觉得这个设计怎么样? -6- 如果你是乔,你会怎么办?乔的经理:这是你提出过的最糟糕的主意。你怎么能说“复制代码”呢?如果你能想到被迫覆盖一些方法是不好的,那么你为什么不考虑一下当你需要对飞行行为做一点小的改动的时候会怎么样…对于所有48个能够飞行的Duck的子类来说?! 我们知道并不是所有的子类都有飞行和呷呷叫的行为,所以继承不是正确的方法。但是,尽管让子类实现Flyable或者Quackable解决了部分问题(不会再有会飞的橡皮鸭子),但
7、是这种方法彻底破坏了行为的重用,所以它只是制造了另一个维护上的噩梦。当然,鸭子可能有一种以上的飞行行为…此刻你可能正等待着有一个设计模式骑着白马来拯救世界。但是,那会是什么?不,我们将使用传统的方式来找到解决方案–使用优秀的面向对象软件设计原则美女在想:如果一种软件开发方法,使我们可以用一种对现有代码影响最少的方式来修改软件,那不是在做梦吧?那样我们就可以花很少的时间来修改软件而有更多的时间给程序增加更酷的功能… -7- 软件开发的一个不变的真理好的,什么是你在软件开发中经常要注意的事情?不论你在那工作,你在建造什
此文档下载收益归作者所有