设计模式,对大家来说都不陌生,但是里面的东西和武功一样,悟 了就简单,不然你永远可以知道,但是使用的都是皮毛,下面我借Head First 书里面的,给想我一样的新手,开拓一下思维,了解为什么要使用设计模式:
假设,现在要做一套模拟鸭子的游戏,我该如何设计?
我们先设计一个鸭子的超类(Superclass),然后让各种鸭子都集成这个类,当然,里面定义了一些公共方法,鸭子都有的。
public class Duck { public void quack() {// 呱呱叫} public void swin(){// 游泳} // 其他方法.. }
另外两个类:MallerDuck 和 RedheadDuck ,实现自己的外观
public class MallarDuck extends Duck{ public void display(){ // 绿毛鸭 } }
public class RedheadDuck extends Duck{ public void display(){ // 红毛鸭 } }
OK,那么现在公司要求,鸭子会飞。可能你说简单嘛,给父类加上 fly() 方法
public class Duck { public void quack() { // 呱呱叫 } public void swin(){ // 游泳 } public void fly(){ // 飞 } }
但是当进行测试的时候,发现很多玩具鸭子,也在飞...,老板很尴尬。当初客户也没说有玩具鸭子啊?但是开发的明白一点,需求是可变的,它永远是追寻更大的利益化,只要能让使用的人满意,没办法。
仔细一样,可以进行方法覆盖,那么玩具鸭子有自己的行为,总飞不起来了嘛
public class DecoyDuck extends Duck{ public void quack() { // 玩具鸭子,唧唧叫 } public void swin(){ // 游泳 } public void fly(){ // 什么都不做,不能飞 } public void display(){ // 这是玩具鸭 } }
现在又接到消息说,为了创新,可能会出现各种不同的鸭子,但是很多fly()等方法会一样,那么不是要重复的去写很多fly()和quart()的方法吗,会写很多,痛苦!这时候我想到接口,为特殊的行为制定接口,需要才去实现。
public interface Quackable { public void quack(); } public interface Flyable { public void fly(); } // 等等
然后其他去实现接口
public class MallarDuck implements Flyable,Quackable{ public void display(){ // 绿毛鸭 } @Override public void fly() { } @Override public void quack() { } } // 其他的类似
但是 这样还是觉得并没有实质的进展,如果 有N多的鸭子,那么得重复多少代码啊!
这让我们引出的一个真理:软件开发中,唯一不变得是变化。
我想起了经常说的一句话:设计是因为未来而存在
此时的代码无论是重用性和复杂度 以及修改 都不好,我们引出一个很重要的设计原则:
找出程序中可能需要变化的部分,把他们独立出来,进行封装,不要和那些不需要变化的代码放一起。结果就是可以轻易的改动或者扩展 要变化的部分,而不引起其他不需要变化的部分。
为了达到代码重用,又方便扩展的情况,我先把Duck 不变得 swim() 独立出来,然后把fly() 和 quack ()这些会变得行为拿出来,看看代码怎么做:
public class Duck { public void swin(){ // 游泳,共有的部分 } } public interface FlyBehaviour { // 飞 这个行为的接口,下面同理 public void fly(); } public interface QuackBehaviour { // 叫的接口 public void quack(); } public class FlyWithWing implements FlyBehaviour{ @Override public void fly() { // 会飞的 鸭子 // 具体实现,可以共用的代码,下面同理 } } public class FlyNoWay implements FlyBehaviour{ @Override public void fly() { // 不会飞 的鸭子 } } // 下面 quck 同理 public class QuackOne implements QuackBehaviour{ @Override public void quack() { // 普通鸭子 呱呱叫 } } public class QuackTwo implements QuackBehaviour { @Override public void quack() { // 橡皮鸭子 唧唧叫 } }
OK,现在的代码,灵活性就更高了。比如我现在可能会添加更多的鸭子,那么无论是会飞的,不会飞的,这些代码是可以重用的,如果需要添加 另外的叫声,我们同样可以创建一个新的QuackThree 去实现接口,也是可以扩展的,现在的代码是不是好很多了呢?
说了这么多,我们初略分析一下, 拿到需求的时候,不要简单的直接开始写代码,为了程序的灵活性,我们应当做一些考虑,这样为我们以后减少工作量做准备。因为程序时间长的部分是维护,开始时间最短,那么我们应该这样去思考,形成习惯,慢慢代码就会好很多了。
相关推荐
然而,正是设计模式的学习让作者认识到面向对象设计的更深层次含义,即如何通过设计模式构建更加灵活、易于维护的软件系统。 #### 结论 《设计模式解析》是一本旨在帮助软件工程师和开发者深入理解和灵活运用设计...
《JavaScript设计模式》是JavaScript设计模式的学习指南。全书分为14章。首先介绍了什么是模式、模式的结构、类别...通过阅读本书,他们将能够提高对设计模式的认识,并学会如何将设计模式应用到JavaScript编程语言中。
《ASP.NET设计模式》内容简介:这本独特的书通过强调松散耦合、高内聚的ASPNET Web应用程序架构设计,使得人们对高质量ASP.NET应用程序结构的认识更进一步。每一章内容分别解决企业ASP.NET应用程序中的一个层,同时...
"设计模式大全,带你全面认识设计模式"这个资源很可能是为了帮助初学者和有经验的开发者深入理解并掌握设计模式的精髓。 设计模式通常分为三大类:创建型、结构型和行为型模式。创建型模式主要关注对象的创建过程,...
设计模式是面向对象思想的集大成,GOF在其经典著作中总结了23种设计模式,又可分为:创建型、结构型和行为型3个大类。对于软件设计者来说,一般的过程就是在熟练掌握语言背景的基础上,了解类库的大致框架和常用的...
主要是介绍各种格式流行的软件设计模式,对于程序员的进一步提升起推进作用,有时间可以随便翻翻~~ 23种设计模式汇集 如果你还不了解设计模式是什么的话? 那就先看设计模式引言 ! 学习 GoF 设计模式的重要性 ...
它可能包含了最常见和最重要的设计模式,以简洁的形式呈现,让读者能够在短时间内对设计模式有基本的认识。 设计模式的应用不仅能够提高代码的可读性和可维护性,还能促进团队间的沟通,因为它们提供了一种共同的...
设计模式是软件工程中的一种重要概念,它源于实践中反复出现并被证明有效的问题解决方案。设计模式不是具体的代码或库,而是一种通用的、可复用的设计解决方案,它描述了在特定上下文中如何来应对常见的设计问题。...
这一部分主要是为了让读者对设计模式有一个基本的认识,包括设计模式的概念、历史背景及其在软件开发过程中的重要性。通过这一部分的学习,读者可以了解到设计模式是如何帮助开发者更好地解决常见的软件设计问题,...
PHP设计模式,适合有经验的开发人员 导言 当你在不断的试图从你的应用程序中发现新的特征时,你是否发现你提出的解决方法和一些 ...设计模式就是一个教你如何利用真实可靠的设计来 组织你的代码的模板。
### 设计模式精解chap05 #### 5.1 概述 设计模式作为一种重要的软件工程概念,在软件开发过程中扮演着至关重要的角色。在这一章节中,我们将深入探讨设计模式的基本概念及其在软件设计中的应用。 **设计模式的...
通过程序范例和UML图示来一一解说,书中代码的重要部分加了标注以使读者更加容易理解,再加上图文并茂,对于初学者还是程序设计高手来说,这都是一本学习和认识JAVA设计模式的一本好书。(注意,本资源附带书中源...
包含以下文件: Java设计模式-图解-附代码.pdf 从Java类库看设计模式.doc 六大UML类图关系.docx 认识UML类图元素_java之UML.doc 设计模式6大原则.doc 设计模式学习笔记.doc 深入浅出设计模式(中文版).pdf
总的来说,“设计模式试题”是一个提升个人技能和团队协作效率的良好资源,通过解答这些问题,开发者不仅能加深对设计模式的认识,还能进一步提升自己的源代码编写水平,使软件设计更加优雅、高效。
软件设计模式是面向对象编程中的一种最佳实践,用于解决常见问题和提高代码的可复用性、可维护性和可扩展性。以下是对标题和描述中提及的四种设计模式的详细解释: 1. **策略模式**: 策略模式的核心思想是将算法的...
本书的目的不是为了全面的介绍各种类别的软件设计模式,也不是为了发展一个新的设计模式或者术语,而是为了突出介绍一些已有的著名的设计模式。这本书的 独特之处在于介绍了一些我认为对开发动态WEB应用程序很有...
设计模式之禅,一种思想书,会一直受益,初学,工作一年,三年认识都不一样。 也算是软件开发的思想启蒙,看书介绍说:能让你设计一个优秀的代码结构,写一段健壮的代码,比较容易的解决一些复杂的需求。
通过将现实世界的认识与设计模式结合,开发者可以更好地理解和应用各种设计模式,从而提高开发效率和代码质量。 认识模式的世界 设计模式的作用可以总结为“化繁为简,以不变应万变”。掌握每个模式的奥妙,在适当...
通过程序范例和UML图示来一一解说,书中代码的重要部分加了标注以使读者更加容易理解,再加上图文并茂,对于初学者还是程序设计高手来说,这都是一本学习和认识JAVA设计模式的一本好书。 多线程与并发处理是程序...