前言
在过去多年的软件开发和教学推广工作中,我时常能够听到这样的声音:
抽象类和接口到底有什么用?继承不好吗?为什么有时候不用它来实现功能复用?能不能在下次增加功能的时候不要修改源代码?每次都改,太麻烦了。有没有一种方法能够减少类的个数?这么多类,太复杂了。面向对象软件的可重用性不是很好吗?为什么我还是在不断编写相同的代码?我学过设计模式,也看了好几本书,但实际开发时我还是不知道怎么运用这些模式?你是否也曾有过上述疑问或者类似的感慨?如果有的话,那么本书将是你明智的选择。本书将结合大量项目实例来逐个讲解设计模式,讲述如何通过设计模式来解决上述问题,让读者能够快速提升自己的开发功力,真正理解和掌握每-一个设计模式,在软件开发的内功修炼之道上迈出坚实的一步。设计模式是面向对象软件开发的入门功夫,是前人经验的积累,它为构建可维护性和可复用性俱佳的软件而诞生。
本书结构及内容
本书分为4个部分,共26章:
第1部分:基础知识,包含第1章和第2章,主要介绍与设计模式相关的基础知识,包括设计模式概述,UML类图、7个面向对象设计原则等内容,为后续设计模式的学习奠定基础。第2部分:创建的艺术,包含第3~8章,介绍6种常用的创建型设计模式,分别是单例模式、简单工厂模式、工厂方法模式、抽象工厂模式、原型模式和建造者模式。第3部分:组合的艺术,包含第9~15章,介绍7种常用的结构性设计模式,分别是适配器模式.桥接模式、组合模式、装饰模式.外观模式.享元模式和代理模式。第4部分:交互的艺术,包含第16~26章,介绍11种常用的行为型设计模式,分别是职责链模式.命令模式、解释器模式.迭代器模式、中介者模式、备忘录模式、观察者模式、状态模式、策略模式、模板方法模式和访问者模式。每章的基本内容如下
第1部分,基础知识
第1章:介绍设计模式的基本概念;
设计模式从何而来设计模式是什么-设计模式有什么用个人观点
第2章:介绍UML类图与面向对象设计原则;
UML概述类与类的UML图示类之间的关系面向对象设计原则概述单一职责原则开闭原则里氏代换原则依赖倒转原则接口隔离原则合成复用原则迪米特法则
第二部分,创建的艺术一创建型模式
第3章:介绍如何确保系统中一个类只能有一个实例;
单例模式的动单例模式概述负载均衡器的设计饿汉式单例与懒汉式单例的讨论.一种更好的单例实现方法单例模式总结
第4章:介绍如何将对象的创建和对象的使用分离;
图表库的设计简单工厂模式概述完整解决方案方案的改进创建对象与使用对象简单工厂模式的简化简单工厂模式总结
第5章:介绍如何通过不同的工厂来创建不同类型的对象;
日志记录器的设计工厂方法模式概述完整解决方案反射与配置文件重载的工厂方法工厂方法的隐藏工厂方法模式总结
第6章:介绍如何设计一个能够创建一系列产品对象的工厂;
界面皮肤库的初始设计产品等级结构与产品组抽象工厂模式概述完整解决方案开闭原则的倾斜性抽象工厂模式总结
第7章:介绍如何通过克隆来得到一个一模一样的对象;
大同小异的工作周报原型模式概述完整解决方案带附件的周报原型管理器的引入和实现原型模式总结
第8章:介绍如何一步步创建一个包含多个组成部分的复杂对象
游戏角色设计建造者模式概述完整解决方案关于Director的进一步讨论建造者模式总结
第三部分,组合的艺术一结构型模式
第9章:介绍如何在不修改现有系统的前提下重用没有源码的第三方类库
没有源码的算法库适配器模式概述完整解决方案类适配器模式双向适配器模式缺省适配器模式适配器模式总结
第10章:介绍如何避免在多层继承结构中类的个数出现爆炸式增长
跨平台图像浏览系统.桥接模式概述完整解决方案适配器模式与桥接模式的联用桥接模式总结
第11章:介绍如何使用面向对象的方式来处理软件系统中的树状结构
设计杀*软件的框架结构组合模式概述完整解决方案透明组合模式与安全组合模式Sunny公司组织结构组合模式总结
第12章:介绍如何不通过继承的方式来扩展类的功能
图形界面构件库的设计装饰模式概述完整解决方案透明装饰模式与半透明装饰模式.装饰模式注意事项装饰模式总结
第13章:介绍如何为复杂的系统提供一个统一的人口
文件加密模块的设计外观模式概述完整解决方案抽象外观类的引外观角色设计补充说明外观模式总结
第14章:介绍如何实现对象的多次复用以节省系统资源
围棋棋子的设计享元模式概述完整解决方案带外部状态的解决方案单纯享元模式和复合享元模式关于享元模式的几点补充享元模式总结
第15章:介绍如何提供--种间接访问机制来实现对象的远程访问或受限访问
收费商务信息查询系统的设计完整解决方案远程代理虚拟代理Java动态代理代理模式总结
第四部,分交互的艺术一行为型模式
第16章:介绍如何让多个对象都有机会来处理同一个请求
采购单的分级审批.职责链模式概完整解决方案纯与不纯的职责链模式职责链模式总结
第17章:介绍如何将请求的发送者和请求接收者完全解耦
自定义功能键命令模式概述完整解决方案命令队列的实现撤销操作的实现宏命令命令模式总结
第18章:介绍如何自定义一个简单的语言
机器人控制程文法规则和抽象语法树解释器模式概述完整解决方案.再谈Context的作用解释器模式总结
第19章:介绍如何间接遍历一个聚合对象中的元素
销售管理系统中数据的遍历迭代器模式概述完整解决方案使用内部类实现迭代器JDK内置迭代器迭代器模式总结
第20章:介绍如何协调多个对象之间复杂的相互调用
客户信息管理窗口的初始设计中介者模式概述完整解决方案中介者与同事类的扩展中介者模式总结
第21章:介绍如何在软件中实现撤销功能
可悔棋的中国象棋备忘录模式概述完整解决方案实现多次撤销再谈备忘录的封装备忘录模式总结
第22章:介绍如何实现对象之间--对多的联动
多人联机对战游戏的设计观察者模式概述完整解决方案JDK对观察者模式的支持观察者模式与Java事件处理观察者模式与MVC观察者模式总结
第23章:介绍如何设计和实现-一个具有多个状态的对象
银行系统中的账户类设计.状态模式概述完整解决方案共享状态使用环境类实现状态转换.状态模式总结
第24章:介绍如何在不修改现有代码的前提下更换一种算法
电影票打折方案模式概述完整解决方案策略模式的两个典型应用模式总结
第25章:介绍如何为一个复杂算法的某些步骤提供多种实现方式
银行利息计算模块模板方法模式概述完整解决方案钩子方法的使用模板方法模式总结
第26章:介绍如何操作一个包含多种类型对象的复杂结构