设计模式的艺术

当前位置:首页 > 计算机网络 > 软件工程/开发项目管理 > 设计模式的艺术

出版社:清华大学出版社
出版日期:2013-1
ISBN:9787302296324
作者:刘伟
页数:396页

章节摘录

版权页:   插图:   在开闭原则的定义中,软件实体可以指一个软件模块、一个由多个类组成的局部结构或一个独立的类。 任何软件都需要面临一个很重要的问题,即它们的需求会随时间的推移而发生变化。当软件系统需要面对新的需求时,应该尽量保证系统的设计框架是稳定的。如果一个软件设计符合开闭原则,那么可以非常方便地对系统进行扩展,而且在扩展时无须修改现有代码,使得软件系统在拥有适应性和灵活性的同时具备较好的稳定性和延续性。随着软件规模越来越大,软件寿命越来越长,软件维护成本越来越高,设计满足开闭原则的软件系统也变得越来越重要。 为了满足开闭原则,需要对系统进行抽象化设计,抽象化是开闭原则的关键。在Java、C#等编程语言中,可以为系统定义一个相对稳定的抽象层,而将不同的实现行为移至具体的实现层中完成。在很多面向对象编程语言中都提供了接口、抽象类等机制,可以通过它们定义系统的抽象层,再通过具体类来进行扩展。如果需要修改系统的行为,无须对抽象层进行任何改动,只需要增加新的具体类来实现新的业务功能即可,实现在不修改已有代码的基础上扩展系统的功能,达到开闭原则的要求。 在本书所要介绍的24种设计模式中,大部分设计模式都符合开闭原则,在对每一个模式进行优缺点评价时,都会将开闭原则作为一个重要的评价依据,以判断基于该模式设计的系统是否具备良好的灵活性和可扩展性。 2.7 里氏代换原则 里氏代换原则由2008年图灵奖得主、美国第一位计算机科学女博士Barbara Liskov教授和卡内基·梅隆大学Jeannette Wing教授于1994年提出。其严格表述如下:如果对每一个类型为S的对象o1,都有类型为T的对象o2,使得以T定义的所有程序P在所有的对象o1都代换成o2时,程序P的行为没有变化,那么类型S是类型T的子类型。这个定义比较拗口且难以理解,因此一般使用它的另一个通俗版定义: 里氏代换原则表明,在软件中将一个基类对象替换成它的子类对象,程序将不会产生任何错误和异常,反过来则不成立,如果一个软件实体使用的是一个子类对象的话,那么它不一定能够使用基类对象。例如,我喜欢动物,那我一定喜欢狗,因为狗是动物的子类;但是我喜欢狗,不能据此断定我喜欢动物,因为我并不喜欢老鼠,虽然它也是动物。

前言

在过去多年的软件开发和教学推广工作中,我时常能够听到这样的声音:抽象类和接口到底有什么用?继承不好吗?为什么有时候不用它来实现功能复用?能不能在下次增加功能的时候不要修改源代码?每次都改,太麻烦了。有没有一种方法能够减少类的个数?这么多类,太复杂了。面向对象软件的可重用性不是很好吗?为什么我还是在不断编写相同的代码?我学过设计模式,也看了好几本书,但实际开发时我还是不知道怎么运用这些模式?……你是否也曾有过上述疑问或者类似的感慨?如果有的话,那么本书将是你明智的选择。本书将结合大量项目实例来逐个讲解设计模式,讲述如何通过设计模式来解决上述问题,让读者能够快速提升自己的开发功力,真正理解和掌握每一个设计模式,在软件开发的内功修炼之道上迈出坚实的一步。写作目的设计面向对象软件比较困难,而设计可复用的面向对象软件就更加困难。——GoF(1995)软件开发是一门技术,更是一门艺术!随着面向对象技术的发展和广泛应用,设计模式在软件开发和设计中的重要性不言而喻。作为软件开发人员,尤其是面向对象软件开发人员,设计模式已成为其内功修炼的重要组成部分之一。无论是面向对象的初学者还是具有一定经验的开发人员,都可以通过对设计模式的学习和使用来加深对面向对象思想的理解,从而开发出具有更好的可扩展性和复用性的软件。设计模式是前人经验的积累,它将让软件变得更像一个艺术品,而不是一堆难以维护和重用的代码。作为一名从事模式使用和推广工作多年的教师兼开发人员,如何更好地将设计模式的思想和实践经验传递给他人是我一直思考的一个问题,于是我开始着手收集和整理这些年积累的一些与设计模式相关的项目实例和资源,经过无数个晚上的“挑灯夜战”,终于完成了本书的编写工作,借此为面向对象技术的推广尽一点绵薄之力。本书结构及内容本书分为4个部分,共26章。第1部分:基础知识,包含第1章和第2章,主要介绍与设计模式相关的基础知识,包括设计模式概述、UML类图、7个面向对象设计原则等内容,为后续设计模式的学习奠定基础。第2部分:创建的艺术,包含第3-8章,介绍6种常用的创建型设计模式,分别是单例模式、简单工厂模式、工厂方法模式、抽象工厂模式、原型模式和建造者模式。第3部分:组合的艺术,包含第9-15章,介绍7种常用的结构型设计模式,分别是适配器模式、桥接模式、组合模式、装饰模式、外观模式、享元模式和代理模式。第4部分:交互的艺术,包含第16-26章,介绍11种常用的行为型设计模式,分别是职责链模式、命令模式、解释器模式、迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式和访问者模式。本书将结合大量应用实例来分析和讲解每一个设计模式,力求通过最通俗易懂的方式来让读者学习和理解设计模式,并在真实项目实例的引导下学会合理选择和运用设计模式。每章的基本结构如下图所示。每章的基本内容如下。第1章:介绍设计模式的基本概念;第2章:介绍UML类图与面向对象设计原则;第3章:介绍如何确保系统中一个类只能有一个实例;第4章:介绍如何将对象的创建和对象的使用分离;第5章:介绍如何通过不同的工厂来创建不同类型的对象;第6章:介绍如何设计一个能够创建一系列产品对象的工厂;第7章:介绍如何通过克隆来得到一个一模一样的对象;第8章:介绍如何一步步创建一个包含多个组成部分的复杂对象;第9章:介绍如何在不修改现有系统的前提下重用没有源码的第三方类库;第10章:介绍如何避免在多层继承结构中类的个数出现爆炸式增长;第11章:介绍如何使用面向对象的方式来处理软件系统中的树状结构;第12章:介绍如何不通过继承的方式来扩展类的功能;第13章:介绍如何为复杂子系统提供一个统一的入口;第14章:介绍如何实现对象的多次复用以节省系统资源;第15章:介绍如何提供一种间接访问机制来实现对象的远程访问或受限访问;第16章:介绍如何让多个对象都有机会来处理同一个请求;第17章:介绍如何将请求的发送者和请求接收者完全解耦;第18章:介绍如何自定义一个简单的语言;第19章:介绍如何间接遍历一个聚合对象中的元素;第20章:介绍如何协调多个对象之间复杂的相互调用;第21章:介绍如何在软件中实现撤销功能;第22章:介绍如何实现对象之间一对多的联动;第23章:介绍如何设计和实现一个具有多个状态的对象;第24章:介绍如何在不修改现有代码的前提下更换一种算法;第25章:介绍如何为一个复杂算法的某些步骤提供多种实现方式;第26章:介绍如何操作一个包含多种类型对象的复杂结构。本书特点本书不是教材,但有教材的严谨性;本书不是科普书,但有科普书的通俗性;本书没有故事情节,却也不失趣味性。本书主要特点如下:(1)提供大量真实项目实例,针对每一个设计模式至少提供了一个完整的实例,是一本基于实例驱动的设计模式实践指南,结合实例来学习设计模式,可以让读者学会在实际开发中运用设计模式,具体实例列表参见之后的“实例目录”。(2)内嵌了适量的思考题和练习题,所有练习题也都基于某个项目实例,让读者能够在学习的同时通过思考题和练习题来理解和进一步巩固所学知识。(3)提供相应的技术博客支持,为广大读者提供一个灵活的沟通和交流平台。(4)内容全面,语言通俗,讲解深入,难度适中,可满足不同层次读者的需求,每一个实例都提供了完整的可执行代码和结构图,所有结构图(类图)均严格按照UML 2.0标准绘制,代码均在JDK 1.7环境下通过测试且运行无误。目标读者如果你是一位有一定开发经验的一线软件开发人员,你想提升自己的软件设计与开发功力,希望设计并开发出可复用性和可维护性俱佳的面向对象软件,那么本书为你而写;如果你是一位计算机或软件相关专业的教育工作者,你想在教授设计或编程类课程的同时让学生掌握一些面向对象设计技巧并将其应用于项目实践,那么本书为你而写;如果你是一名刚接触面向对象编程的初学者,你想更好地理解面向对象思想并编写出高质量的程序代码,那么本书为你而写;如果你是一位软件工程或者软件架构设计研究人员,你正从事或者准备从事面向对象软件设计等相关研究工作,那么本书也为你而写。无论你使用的编程语言是C++、Java、C#、VB.NET、ObjectiveC,还是JavaScript、PHP、Delphi、Python等,我相信本书都会有你想要的内容。本书适用于:从未接触过设计模式,想用较短的时间来熟悉并掌握设计模式的读者;学习过设计模式,有一定基础,但不知道如何在实际开发中运用设计模式的读者;使用过设计模式,想对GoF设计模式有一个更加全面的学习的读者;……总之,本书可作为一线软件开发人员、高等院校计算机及软件等相关专业师生、IT培训机构讲师和学员、业余软件开发人员及设计模式研究人员和爱好者的技术类参考用书和自学读物。感谢感谢我的师长,没有你们多年的悉心教诲与耐心指导,就没有现在的我。感谢我的家人,谢谢你们一直在我背后的默默支持与真情付出。感谢胡志刚、王斌、郭克华、张友生、费洪晓、任胜兵、谭长庚、江林、徐再德、张佳宁、阎朝坤、张楚才、杨柳、宋铁、郑美光、任波、周建军、曾文兵、陈昌主等同事与好友在我写作过程中给予的宝贵意见和建议,正因为有你们,我的奋斗之路才会如此丰富多彩!感谢黄瑞、屈光辉、胡坤、吕丰、梁佳宾、游永彬、刘宏韬、黄宇健、朱礼礼、李辉、唐磊、马元文等学生参与本书初稿的校对工作,并发现书中的一些文字纰漏和错误,从学习者的角度提出一些建议,以助于本书的充实和完善。感谢我的CSDN技术博客中那些认识的、不认识的网友们对我工作的肯定,谢谢你们的支持与鼓励。感谢所有帮助和支持过我的朋友,特别是那些听过我课的学生和企业学员。同时,在本书的编写过程中我参考和引用了国内外很多书籍和网站的相关内容,个别实例的初始原型也来源于网络,由于涉及的网站和网页太多,无法一一列举,在此一并予以感谢。感谢武侠巨匠金庸老先生,那些武侠小说给予我太多写作灵感,同时书中不少实例中的人名也源于小说中那些经典的武侠人物。最后特别感谢清华大学出版社为本书出版所付出的努力,你们的专业和严格的工作作风让我在写作过程中充满了激情与动力,因为我们的目标一致:为读者送上最好的图书!由于时间仓促、学识有限,虽经多次审阅与校稿,但书中不足和疏漏之处难免,恳请广大读者将意见和建议通过清华大学出版社反馈给我,力求精益求精,更趋完美。刘伟2012年7月

内容概要

  刘伟,中南大学计算机应用技术博士,高级工程师,国家认证系统分析师,首批国家认证系统架构设计师,数据库系统工程师,微软认证系统工程师,CSAI顾问团专业顾问及企业内训讲师,CSDN认证专家。具有十余年软件开发、项目管理及教育培训经验,曾在NIIT(印度国家信息技术学院)担任高级讲师,主持和参与三十多个软件项目的开发工作,现主要致力于软件工程、数据挖掘等领域的教学、推广和研究工作。发表相关论文多篇,已编写出版《设计模式》、《设计模式实训教程》、《设计模式的艺术——软件开发人员内功修炼之道》等著作。

书籍目录

第1部分基 础 知 识
第1章从招式与内功谈起——设计模式概述
1.1设计模式从何而来
1.2设计模式是什么
1.3设计模式有什么用
1.4个人观点
1.5知识回顾
第2章预备知识——UML类图与面向对象设计原则
2.1UML概述
2.2类与类的UML图示
2.3类之间的关系
2.4面向对象设计原则概述
2.5单一职责原则
2.6开闭原则
2.7里氏代换原则
2.8依赖倒转原则
2.9接口隔离原则
2.10合成复用原则
2.11迪米特法则
2.12知识回顾
第2部分创建的艺术——创建型模式
第3章确保对象的唯一性——单例模式
3.1单例模式的动机
3.2单例模式概述
3.3负载均衡器的设计
3.4饿汉式单例与懒汉式单例的讨论
3.5一种更好的单例实现方法
3.6单例模式总结
3.7知识回顾
第4章集中式工厂的实现——简单工厂模式
4.1图表库的设计
4.2简单工厂模式概述
4.3完整解决方案
4.4方案的改进
4.5创建对象与使用对象
4.6简单工厂模式的简化
4.7简单工厂模式总结
4.8知识回顾
第5章多态工厂的实现——工厂方法模式
5.1日志记录器的设计
5.2工厂方法模式概述
5.3完整解决方案
5.4反射与配置文件
5.5重载的工厂方法
5.6工厂方法的隐藏
5.7工厂方法模式总结
5.8知识回顾
第6章产品族的创建——抽象工厂模式
6.1界面皮肤库的初始设计
6.2产品等级结构与产品族
6.3抽象工厂模式概述
6.4完整解决方案
6.5开闭原则的倾斜性
6.6抽象工厂模式总结
6.7知识回顾
第7章对象的克隆——原型模式
7.1大同小异的工作周报
7.2原型模式概述
7.3完整解决方案
7.4带附件的周报
7.5原型管理器的引入和实现
7.6原型模式总结
7.7知识回顾
第8章复杂对象的组装与创建——建造者模式
8.1游戏角色设计
8.2建造者模式概述
8.3完整解决方案
8.4关于Director的进一步讨论
8.5建造者模式总结
8.6知识回顾
第3部分组合的艺术——结构型模式
第9章不兼容结构的协调——适配器模式
9.1没有源码的算法库
9.2适配器模式概述
9.3完整解决方案
9.4类适配器模式
9.5双向适配器模式
9.6缺省适配器模式
9.7适配器模式总结
9.8知识回顾
第10章处理多维度变化——桥接模式
10.1跨平台图像浏览系统
10.2桥接模式概述
10.3完整解决方案
10.4适配器模式与桥接模式的联用
10.5桥接模式总结
10.6知识回顾
第11章树形结构的处理——组合模式
11.1设计杀毒软件的框架结构
11.2组合模式概述
11.3完整解决方案
11.4透明组合模式与安全组合模式
11.5Sunny公司组织结构
11.6组合模式总结
11.7知识回顾
第12章扩展系统功能——装饰模式
12.1图形界面构件库的设计
12.2装饰模式概述
12.3完整解决方案
12.4透明装饰模式与半透明装饰模式
12.5装饰模式注意事项
12.6装饰模式总结
12.7知识回顾
第13章提供统一入口——外观模式
13.1文件加密模块的设计
13.2外观模式概述
13.3完整解决方案
13.4抽象外观类的引入
13.5外观角色设计补充说明
13.6外观模式总结
13.7知识回顾
第14章实现对象的复用——享元模式
14.1围棋棋子的设计
14.2享元模式概述
14.3完整解决方案
14.4带外部状态的解决方案
14.5单纯享元模式和复合享元模式
14.6关于享元模式的几点补充
14.7享元模式总结
14.8知识回顾
第15章对象的间接访问——代理模式
15.1收费商务信息查询系统的设计
15.2代理模式概述
15.3完整解决方案
15.4远程代理
15.5虚拟代理
15.6Java动态代理
15.7代理模式总结
15.8知识回顾
第4部分交互的艺术——行为型模式
第16章请求的链式处理——职责链模式
16.1采购单的分级审批
16.2职责链模式概述
16.3完整解决方案
16.4纯与不纯的职责链模式
16.5职责链模式总结
16.6知识回顾
第17章请求发送者与接收者解耦——命令模式
17.1自定义功能键
17.2命令模式概述
17.3完整解决方案
17.4命令队列的实现
17.5撤销操作的实现
17.6请求日志
17.7宏命令
17.8命令模式总结
17.9知识回顾
第18章自定义语言的实现——解释器模式
18.1机器人控制程序
18.2文法规则和抽象语法树
18.3解释器模式概述
18.4完整解决方案
18.5再谈Context的作用
18.6解释器模式总结
18.7知识回顾
第19章遍历聚合对象中的元素——迭代器模式
19.1销售管理系统中数据的遍历
19.2迭代器模式概述
19.3完整解决方案
19.4使用内部类实现迭代器
19.5JDK内置迭代器
19.6迭代器模式总结
19.7知识回顾
第20章协调多个对象之间的交互——中介者模式
20.1客户信息管理窗口的初始设计
20.2中介者模式概述
20.3完整解决方案
20.4中介者与同事类的扩展
20.5中介者模式总结
20.6知识回顾
第21章撤销功能的实现——备忘录模式
21.1可悔棋的中国象棋
21.2备忘录模式概述
21.3完整解决方案
21.4实现多次撤销
21.5再谈备忘录的封装
21.6备忘录模式总结
21.7知识回顾
第22章对象间的联动——观察者模式
22.1多人联机对战游戏的设计
22.2观察者模式概述
22.3完整解决方案
22.4JDK对观察者模式的支持
22.5观察者模式与Java事件处理
22.6观察者模式与MVC
22.7观察者模式总结
22.8知识回顾
第23章对象状态及其转换——状态模式
23.1银行系统中的账户类设计
23.2状态模式概述
23.3完整解决方案
23.4共享状态
23.5使用环境类实现状态转换
23.6状态模式总结
23.7知识回顾
第24章算法的封装与切换——策略模式
24.1电影票打折方案
24.2策略模式概述
24.3完整解决方案
24.4策略模式的两个典型应用
24.5策略模式总结
24.6知识回顾
第25章定义算法的框架——模板方法模式
25.1银行利息计算模块
25.2模板方法模式概述
25.3完整解决方案
25.4钩子方法的使用
25.5模板方法模式总结
25.6知识回顾
第26章操作复杂对象结构——访问者模式
26.1OA系统中员工数据汇总
26.2访问者模式概述
26.3完整解决方案
26.4访问者模式与组合模式联用
26.5访问者模式总结
26.6知识回顾
参考文献

编辑推荐

《设计模式的艺术:软件开发人员内功修炼之道》编辑推荐:(1)实例驱动:《设计模式的艺术:软件开发人员内功修炼之道》提供了30多个项目实例,每一个模式的讲解和练习都基于项目实例,让读者在项目实例的引导下学会正确选择和合理运用设计模式,真正理解和掌握每一个设计模式。(2)问题导入:《设计模式的艺术:软件开发人员内功修炼之道》的大多数设计模式都通过一个有问题的解决方案来导入,对使用模式之前的设计方案与使用模式重构之后的设计方案进行对比分析,加深对模式的理解。(3)结构严谨:《设计模式的艺术:软件开发人员内功修炼之道》每一章都从项目实例分析入手,逐步引出模式定义和结构,再提供一套应用模式的完整解决方案,然后对模式进行深入讲解,最后总结模式优缺点和适用场景,内容编排符合学习习惯,力求通过最通俗易懂的方式来讲解设计模式。(4)内容全面:对GoF 23个常用设计模式的讲解全面且细致,深入浅出,难度适中,可满足不同层次读者的需求。(5)边学边练:《设计模式的艺术:软件开发人员内功修炼之道》每一章都内嵌了适量的思考题和练习题,所有练习题也都基于项目实例,让读者能够在学习的同时通过思考题和练习题来消化和进一步巩固所学知识。(6)博客支持:《设计模式的艺术:软件开发人员内功修炼之道》作者在CSDN开辟了设计模式专栏博客,为广大读者提供一个灵活的沟通和交流平台,读者也可以很方便地与作者进行交互。

作者简介

《设计模式的艺术:软件开发人员内功修炼之道》内容简介:软件开发是一门技术,更是一门艺术。设计模式是面向对象软件开发的入门功夫,是前人经验的积累,它为构建可维护性和可复用性俱佳的软件而诞生。《设计模式的艺术:软件开发人员内功修炼之道》结合大量应用实例分析和讲解每一个设计模式,力求通过最通俗易懂的方式让读者学习和理解设计模式,并且在真实项目实例的引导下学会选择和合理运用设计模式。 
《设计模式的艺术:软件开发人员内功修炼之道》分为4个部分,共26章内容:第1部分(第1章、第2章)为基础知识,包括设计模式概述、UML类图与面向对象设计原则等;第2部分(第3~8章)为创建的艺术,包括6种常用的创建型设计模式;第3部分(第9~15章)为组合的艺术,包括7种常用的结构型设计模式;第4部分(第16—26章)为交互的艺术,包括11种常用的行为型设计模式。

图书封面


 设计模式的艺术下载



发布书评

 
 


精彩短评 (总计17条)

  •     今天刚收到,看完了前面的两节基础,讲的很详细,突出重点时有例子指引,很不错,容易理解。随手看了中间的建造者模式 ,表示很无压力看懂流程与技巧,注释详细,该注的都 注了。在其中能深体会到面向对象的思想。刚看了下书印的不多,3000来,但真心不错,像我一样刚培训学习的菜鸟们可以来看看,收获定会丰富。
  •     大家好!我是本书作者刘伟,在此感谢您的支持与鼓励!为了方便购买本书的读者交流,本人在技术博客上开辟了“学习之路,与你同行——《设计模式的艺术》交流区”,大家只要在各大搜索引擎中输入关键词“刘伟技术博客”即可找到我的CSDN技术博客,祝各位阅读愉快!
  •     每次在当当上买书,书皮上都有一层土。学软件,这本书超有用
  •     太好看了,第一次发表评论
  •     结构清晰,这个商品不错
  •     首先,书拿到手上后,第一感觉很不错,书质印刷的质量较好其次,书的内容很好,是我想要的,达到了我的预期最后,货到的速度挺快的,前一晚定的,第二天下午到,速度很赞!
  •     刘伟的书,写的很实用,不唱高调,从基础出发,又把问题解释的很清楚,有延伸,有扩展
  •     刘伟老师写的这本书,内容讲得非常的好的,23个设计模式,都分析透了,只要认真的读,写例子,都能懂。这本书在老师csdn博客里看到了。逛了很多网上书诚,最便宜的只有当当。价格实惠。发货速度快。
  •     还行吧,看完再说
  •     极力推荐,纸张非常棒,内容例子很详实。
  •     赞,讲的很简洁透彻
  •     国内写IT技术书的作者少有能把话说的这么有条理、明明白白的
  •     因为这本书,设计模式考试得了88
  •     该设计模式讲述模式用java语言编写,易懂。。阐述的很透彻。。
  •     看过几天,印刷用的纸张不错,正在学习中。
  •     实例+讲述 很容易看懂
  •     该书写得确实很不错啊
 

外国儿童文学,篆刻,百科,生物科学,科普,初中通用,育儿亲子,美容护肤PDF图书下载,。 零度图书网 

零度图书网 @ 2024