新書推薦:
《
大国脊梁:漫画版
》
售價:HK$
80.2
《
跟着渤海小吏读历史:大唐气象(全三册)
》
售價:HK$
189.0
《
心智的构建:大脑如何创造我们的精神世界
》
售價:HK$
81.4
《
美国小史(揭秘“美国何以成为美国”,理解美国的经典入门读物)
》
售價:HK$
81.4
《
中国古代北方民族史丛书——东胡史
》
售價:HK$
87.8
《
巨人传(插图珍藏本)
》
售價:HK$
705.6
《
地下(村上春树沙林毒气事件的长篇纪实)
》
售價:HK$
76.7
《
偿还:债务与财富的阴暗面
》
售價:HK$
80.2
編輯推薦:
本书是为有一定编程基础的读者编写的,主要介绍设计模式的知识和开发方法。作者参阅了国内外多种设计模式的教材,认真分析了学习者在学习过程中遇到的困难,设计了读者易于学习的教材体系,用大量应用实例深入浅出地讲解设计模式的使用方法和实际效果,使读者易于理解、便于使用,大大减少了初学者学习设计模式的困难。
內容簡介:
设计模式是面向对象编程的热门话题之一,也是近年来国内外广泛使用和研究的热点。 本书是一本介绍软件设计模式内容及原理的教材,作者以设计模式的概念、原则、分类及构成为出发点,详细分析了24种设计模式。在介绍每种模式时,以一个软件设计开发中的实际问题为引子,探讨一般实现方法的缺陷,进而介绍新模式的结构,再以一个实际的例子展现模式的编程方法,*后对使用模式的效果进行分析,通过应用实例展示设计模式在应用系统开发实践中的应用。同时,本书紧跟业界技术发展,对*的软件架构建模技术进行了分析和介绍。 本书是为有一定编程基础的读者编写的,内容全面,概念清晰,例题丰富,循序渐进,易于学习,是大学计算机专业本科生、研究生学习设计模式的基础教材,也可以作为从事软件研究和软件开发工作有关人员的参考书。
目錄 :
C O N T E N T S
目录
第1章面向对象基础
1.1面向对象方法
1.1.1面向对象方法的特点
1.1.2面向对象方法的基本概念
1.1.3面向对象语言的产生
1.1.4面向对象的优势
1.2面向对象分析
1.2.1概论
1.2.2需求陈述
1.2.3建立对象模型
1.2.4建立动态模型
1.2.5建立功能模型
1.3面向对象设计
1.3.1面向对象设计的准则
1.3.2问题域部分设计
1.3.3人机交互部分设计
1.3.4数据管理部分设计
1.4面向对象编程实现
1.4.1编程语言的选择
1.4.2面向对象程序设计风格
1.5面向对象的测试
1.5.1面向对象测试概述
1.5.2面向对象测试策略
1.5.3设计测试用例
1.6面向对象软件设计原则
1.6.1开放封闭原则
1.6.2单一职责原则
1.6.3里氏代换原则
1.6.4依赖倒转原则
1.6.5接口隔离原则
1.6.6迪米特法则
1.6.7其他原则
本章小结
习题
参考文献
第2章C#面向对象编程基础
2.1类
2.1.1类的字段
2.1.2类的属性
2.1.3类的方法
2.1.4构造函数和析构函数
2.2继承
2.3抽象类
2.4接口
2.5多态
2.5.1虚函数
2.5.2多态
本章小结
习题
参考文献
第3章设计模式
3.1设计模式基础
3.1.1设计模式概念
3.1.2设计模式的基本要素
3.1.3怎样使用设计模式
3.1.4设计模式的类型
3.2创建型模式
3.2.1简单工厂模式
3.2.2工厂方法模式
3.2.3抽象工厂模式
3.2.4建造者模式
3.2.5单件模式
3.2.6原型模式
3.3结构型模式
3.3.1适配器模式
3.3.2装饰模式
3.3.3桥接模式
3.3.4享元模式
3.3.5外观模式
3.3.6代理模式
3.3.7组合模式
3.4行为型模式
3.4.1模板方法模式
3.4.2观察者模式
3.4.3迭代器模式
3.4.4责任链模式
3.4.5备忘录模式
3.4.6命令模式
3.4.7状态模式
3.4.8访问者模式
3.4.9中介者模式
3.4.10策略模式
3.4.11解释器模式
本章小结
习题
参考文献
第4章综合实例武侯预伏锦囊计
4.1问题描述
4.2需求分析
4.3系统类结构
4.4各主要操作的活动图
4.5设计中采用的主要设计模式
4.6程序代码
参考文献
第5章软件架构与架构建模技术
5.1软件架构概况
5.1.1软件架构的发展史
5.1.2软件架构的定义
5.2客户机服务器模式
5.2.1传统两层客户机服务器模式
5.2.2经典三层客户机服务器模式
5.3浏览器服务器模式
5.4MVC架构模式
5.4.1MVC结构
5.4.2MVC的特点
5.5基于构件的模式
5.6软件架构建模技术
5.6.1软件架构4 1视图模型
5.6.24 1视图模型建模方法
5.6.3软件架构建模的迭代过程
本章小结
习题
参考文献
第6章面向服务的软件架构SOA
6.1SOA简介
6.1.1SOA参考模型
6.1.2SOA的设计原则
6.1.3SOA实现的主要技术规范
6.2SOA的框架
6.2.1以服务消费者为中心的SOA
6.2.2以用户为中心的SOA
6.3SOA实例基于SOA的OA与ERP整合应用
6.4SOA的应用分析
本章小结
习题
参考文献
第7章云计算环境下的软件架构
7.1软件三层架构模型
7.1.1三层软件架构产生的原因
7.1.2三层软件架构介绍
7.1.3三层架构存在的问题
7.2基于云计算的软件架构
本章小结
习题
参考文献
內容試閱 :
F O R E W O R D前言
面向对象程序设计已经成为软件设计开发领域的主流,而学习使用设计模式非常有助于软件开发人员开发出易维护、易扩展、易复用的代码。而且,目前越来越多的大学和培训机构也把面向对象技术作为主要教学内容。本书从面向对象的基本概念入手,介绍面向对象程序设计的主要原理和方法,重点探讨了在程序设计中怎样使用著名的24个设计模式。本书编者在十余年的项目开发实践中积累了丰富的开发经验,在近年来的项目开发中,也有意识地大量使用设计模式来提高系统的可复用性。在对各类设计模式的使用中常常沉醉于设计模式精妙的构思和优雅的结构,于是产生了编写一本用实例来透彻讲解设计模式使用的参考书的想法,鉴于高等院校对设计模式相关教材的迫切需要,因此决定将本书以教材的形式撰写。作者于2009年编写了《实用软件设计模式教程》,由清华大学出版社出版。该书出版后,受到了广大读者的欢迎,认为该书概念清晰,叙述详尽,深入浅出,通俗易懂。根据发展的需要,作者于2016年编写了《实用软件设计模式教程(第2版)》,本书第2版相较第1版,对最新的软件架构技术进行了补充阐述,紧跟当前技术发展,同时改用业界使用较为广泛的C#程序设计语言作为设计模式的描述语言,为读者的工作和学习提供有益的帮助。本书严格执行面向对象设计标准并使用实例讲解每个设计模式,使读者易于理解、便于使用,最后一章还用实际项目开发实践中的实例作为例子,介绍各种设计模式在实际项目中综合应用的方法。本书的章节安排如下。第1章为面向对象基础,详细分析面向对象方法,从面向对象方法的产生、面向对象方法的概念引出了面向对象方法的优势,又结合一个具体的应用系统实例,细致分析了面向对象分析、面向对象设计、面向对象编程实现、面向对象的测试以及面向对象软件设计原则的主要步骤和方法。第2章为C#面向对象编程基础,介绍C#语言的相关概念和技术,为后续的设计模式学习打下基础。第3章为设计模式,按创建型、结构型、行为型分类,详细分析23种设计模式,在介绍每个模式时,以一个软件设计开发中的实际问题为引子,探讨一般实现方法的缺陷,进而介绍新模式的结构,再以一个实际的例子展现模式的编程方法,最后对使用模式的效果进行分析。第4章为综合实例,该实例集中使用了多种设计模式,展示设计模式在应用系统开发实践中的应用。第5章为软件架构与架构建模技术,介绍软件架构的定义和发展史,分析了几种常用的软件架构模式,并简要介绍软件架构建模技术。第6章为面向服务的软件架构SOA,简要介绍SOA、SOA的框架及其应用实例。第7章为云计算环境下的软件架构,主要介绍在云计算环境下软件架构的技术和内容。本书的编写过程中,林春喜、杨刚、吴夏、武晓周、姚智海、王婵、陈鹏、闫志浩等人完成了大量校正、录入工作,在此对他们的工作表示感谢。在此谨对所有曾经支持和帮助过我们的同志和朋友表示真挚的谢意。由于我们水平有限,再加上时间紧迫,书中难免有疏漏和不妥之处,盼望专家和广大读者不吝指正。
编者2016年12月
第3章设计模式
人们采用面向对象思想进行软件设计的过程中,对某些相似问题的解决方案进行总结和升华,提出了设计模式的概念,从而进一步提高了程序代码的复用程度。本章简要介绍了设计模式的基本概念和组成要素,并分类介绍了24种设计模式。3.1设计模式基础设计面向对象软件比较困难,而设计可复用的面向对象软件就更加困难。必须找到相关的对象,以适当的粒度将它们归类,再定义类的接口和继承层次,建立对象之间的基本关系。设计应该对手头的问题有针对性,同时对将来的问题和需求也要有足够的通用性。另外也希望避免重复设计或尽可能少做重复设计。有经验的面向对象设计者会了解,不是解决任何问题都要从头做起。他们更愿意复用以前使用过的解决方案。当找到一个好的解决方案,他们会一遍又一遍地使用。这些经验是他们成为内行的部分原因。因此,会在许多面向对象系统中看到类和相互通信的对象的重复模式。这些模式解决特定的设计问题,使面向对象设计更灵活、优雅,最终使复用性更好。3.1.1设计模式概念设计模式Design Pattern是一套被反复使用、多数人知晓的、经过分类编目的代码设计经验的总结。使用设计模式是为了可重用代码,让代码更容易被他人理解以及保证代码的可靠性。设计模式使人们可以更加简单方便地复用成功的设计和体系结构。将已证实的技术表述成设计模式也会使新系统开发者更加容易理解其设计思路。设计模式帮助设计者做出有利于系统复用的选择,避免设计损害了系统复用性。通过提供一个显式的类和对象的作用关系以及它们之间潜在联系的说明规范,设计模式能够提高已有系统的文档管理和系统维护的有效性。简而言之,设计模式可以帮助设计者更快更好地完成系统设计。一开始,设计者可以把模式想象成一种特别巧妙和敏锐的用以解决某类特定问题的方法。更确切地说,许多人从不同角度解决了某个问题,最终大家提出了最通用和灵活的解决办法。这个问题可能是设计者以前见过并解决过的,但是自己的方法可能比不上模式所体现的方法完整。尽管这些方法被称作设计模式,但实际上它们没有仅仅限于设计的范畴。模式看起来似乎跟传统的分析、设计和实现相去甚远; 但恰恰相反,模式体现的是程序整体的构思,所以有时候它也会出现在分析或者是概要设计阶段。这是个有趣的现象,因为模式可以由代码直接实现,所以可能不希望在详细设计或编码以前使用模式,实际上在详细设计和编码之前设计者可能都不会意识到自己需要某个特定的模式。模式的基本概念也可以看作是设计的基本概念: 即增加一个抽象层。无论什么时候,当设计者想把某些东西抽象出来的时候,实际上是在分离特定的细节,这么做的动机就是把变化的东西从那些不变的东西里分离出来。这个问题的另一种说法是,当发现程序的某一部分由于某种原因有可能会变化的话,设计者会希望这些变化不会传播给程序代码的其他部分。这么做不但使程序更容易维护,而且它通常使程序更容易理解,这同时也会降低成本。很多情况下,对于能否设计出优雅和容易维护的系统来说,最难的就是找到一系列变化的东西。这就意味着最重要的是找出系统里变化的部分,或者说是找到成本最高的部分。一旦找出了这一系列变化,就可以以之为焦点来构造设计。设计模式的目的就是为了把代码里变化的那一部分分离出来。如果这么看待设计模式,就会发现本书实际上已经讲了一些设计模式了。例如说,可以认为继承就是一种设计模式,只不过它是由编译器来实现罢了。通过继承可以使拥有相同接口这些接口是不变的的对象具有不同的行为这就是变化的部分。组合Composition也可以被认为是一种模式,它可以静态或者动态地改变用以实现某个类的对象,从而改变这个类的行为。3.1.2设计模式的基本要素1. 模式名称
模式名称Pattern Name是一个助记名,它用一两个词来描述模式的问题、解决方案和效果。命名一个新的模式增加了设计词汇。设计模式允许在较高的抽象层次上进行设计。基于一个模式词汇表,同事之间就可以讨论模式并在编写文档时使用它们。模式名可以帮助思考,便于与其他人交流设计思想及设计结果。2.问题问题Problem描述了应该在何时使用模式。它解释了设计问题和问题存在的前因后果,它可能描述了特定的设计问题,如怎样用对象表示算法等; 也可能描述了导致不灵活设计的类或对象结构。有时候,问题部分会包括使用模式必须满足的一系列先决条件。3.解决方案解决方案Solution描述了设计的组成成分,以及它们之间的相互关系及各自的职责和协作方式。因为模式就像一个模板,可应用于多种不同场合,所以解决方案并不描述一个特定而具体的设计或实现,而是提供设计问题的抽象描述和怎样用一个具有一般意义的元素组合类或对象组合来解决这个问题。4. 效果效果Consequences描述了模式应用的效果及使用模式应权衡的问题。尽管描述设计决策时,并不总提到模式效果,但它们对于评价设计选择和理解使用模式的代价及好处具有重要意义。软件效果大多关注对时间和空间的衡量,它们也表述了语言和实现问题。因为复用是面向对象设计的要素之一,所以模式效果包括它对系统的灵活性、扩充性或可移植性的影响,显式地列出这些效果对理解和评价这些模式很有帮助。3.1.3怎样使用设计模式怎样选择设计模式是使用设计模式之前需要重点考虑的问题,本书有20多个设计模式供选择使用,要从中找出一个能够恰当地解决特定问题的模式还是有一定困难的。在选择模式时,需要考虑这些设计模式的意图和它们是怎样解决设计问题的,研究目的相似的模式,考虑在设计中想要什么样的变化却又不会引起重新设计。一旦选择了一个设计模式,下面这些步骤可以帮助设计者有效地使用它。 大致浏览一遍模式,特别注意其意图、适用场合和效果,确定它能够解决问题。 学习一下这个模式的具体代码示例,研究代码将有助于实现模式。 为将要定义的类定义一个有意义的名字,将模式参与者的名字合并入自己的类名是很有用的,这会帮助设计者在实现中更显式地体现出模式来,并提高代码的可读性。例如,如果在图书馆图书归类算法中使用了策略Strategy模式,你可能有名为SortByTitleStrategy或SortByAuthorStrategy这样的类。 定义类,声明它们的接口,建立它们的继承关系,识别模式在应用中影响到的类,做出相应的修改。 实现设计模式中相关的操作,完成必要的责任和协作。以上步骤适用于刚开始使用设计模式时,当对设计模式非常了解时,完全可以有自己的使用体会和方法。最后,需要了解的是,在一个项目中,设计模式并不是越多越好。设计模式不能随意使用,通常当通过引入额外的简洁层次获得灵活性和可变性的同时,也使设计变得更加复杂或牺牲了一定的性能。一个设计模式只有当它提供的灵活性是真正需要的时候,才有必要使用。