(转)史上最全设计模式导学目录(完整版)

最近在整理程序设计原则,但是只是凭自己的经验简单描述了一下,显然不是很规范。设计的原则有单一职责、接口隔离、开放封闭原则等,从这些原则中衍生出24中设计模式。他说完这些我隐约是有些印象的,可能是知识不成体系,所有很容易忘记。而且口语化的表达让人感觉不专业。趁着今天有时间,做一个记录。

“开发一个满足规范的软件就跟走在水面上一样,除非是结了冰才行(或者需求冻结不变了)”——Edward V. Berard。

我们都清楚,软件开发的规格要求并不是一成不变的。你开发的软件随时都可能会发生变化。今天这个软件的确是在履行它的职责。但是这样就够了吗?你设计的软件能够拥抱变化吗?

好的面向对象的设计才是关键。

如果你是这么想的,那么请你问自己几个问题。

  1. 你的代码是可重用的吗?
  2. 如果需求改变了,是否很容易能修改完成?
  3. 能否在不修改代码的前提下进行扩展?

别担心。并不是你一个人会面临这些问题。我们会一块学习如何能让我们的软件在面对改变时能更具灵活性。

这个问题已经有不少人研究过了,他们得出的结论是OOD原则。

下面的文章从设计模式概述到设计原则,再到具体的设计模式逐步递进。

基础知识

设计模式概述
从招式与内功谈起——设计模式概述(一):设计模式从何而来?
从招式与内功谈起——设计模式概述(二):设计模式是什么?
从招式与内功谈起——设计模式概述(三):设计模式有什么用?附:个人观点

面向对象设计原则
面向对象设计原则概述
面向对象设计原则之单一职责原则
单一职责原则(Single Responsibility Principle, SRP):一个类只负责一个功能领域中的相应职责,或者可以定义为:就一个类而言,应该只有一个引起它变化的原因。
面向对象设计原则之开闭原则
开闭原则(Open-Closed Principle, OCP):一个软件实体应当对扩展开放,对修改关闭。即软件实体应尽量在不修改原有代码的情况下进行扩展。
面向对象设计原则之里氏代换原则
里氏代换原则(Liskov Substitution Principle, LSP):所有引用基类(父类)的地方必须能透明地使用其子类的对象。
面向对象设计原则之依赖倒转原则
依赖倒转原则(Dependency Inversion Principle, DIP):抽象不应该依赖于细节,细节应当依赖于抽象。换言之,要针对接口编程,而不是针对实现编程。
面向对象设计原则之接口隔离原则
接口隔离原则(Interface Segregation Principle, ISP):使用多个专门的接口,而不使用单一的总接口,即客户端不应该依赖那些它不需要的接口。
面向对象设计原则之合成复用原则
合成复用原则(Composite Reuse Principle, CRP):尽量使用对象组合,而不是继承来达到复用的目的。
面向对象设计原则之迪米特法则
迪米特法则(Law of Demeter, LoD):一个软件实体应当尽可能少地与其他实体发生相互作用。

六个创建型模式

简单工厂模式-Simple Factory Pattern【学习难度:,使用频率:】
工厂三兄弟之简单工厂模式(一):图表库的设计
工厂三兄弟之简单工厂模式(二):简单工厂模式概述
工厂三兄弟之简单工厂模式(三):图表库的简单工厂模式解决方案
工厂三兄弟之简单工厂模式(四):图表库解决方案的改进,简单工厂模式的简化,简单工厂模式总结

工厂方法模式-Factory Method Pattern【学习难度:,使用频率:】
工厂三兄弟之工厂方法模式(一):日志记录器的设计
工厂三兄弟之工厂方法模式(二):工厂方法模式概述
工厂三兄弟之工厂方法模式(三):日志记录器的工厂方法模式解决方案,反射与配置文件
工厂三兄弟之工厂方法模式(四):重载的工厂方法,工厂方法的隐藏,工厂方法模式总结

抽象工厂模式-Abstract Factory Pattern【学习难度:,使用频率:】
工厂三兄弟之抽象工厂模式(一):界面皮肤库的初始设计
工厂三兄弟之抽象工厂模式(二):产品等级结构与产品族
工厂三兄弟之抽象工厂模式(三):抽象工厂模式概述
工厂三兄弟之抽象工厂模式(四):界面皮肤库的抽象工厂模式解决方案
工厂三兄弟之抽象工厂模式(五):“开闭原则”的倾斜性,抽象工厂模式总结

单例模式-Singleton Pattern【学习难度:,使用频率:】
确保对象的唯一性——单例模式 (一):单例模式的动机,单例模式概述
确保对象的唯一性——单例模式 (二):负载均衡器的设计与实现
确保对象的唯一性——单例模式 (三):饿汉式单例与懒汉式单例的讨论
确保对象的唯一性——单例模式 (四):一种更好的单例实现方法(静态内部类)
确保对象的唯一性——单例模式 (五):单例模式总结

原型模式-Prototype Pattern【学习难度:,使用频率:】
对象的克隆——原型模式(一):大同小异的工作周报,原型模式概述
对象的克隆——原型模式(二):工作周报的原型模式解决方案
对象的克隆——原型模式(三):带附件的周报【浅克隆,深克隆】
对象的克隆——原型模式(四):原型管理器的引入和实现,原型模式总结

建造者模式-Builder Pattern【学习难度:,使用频率:】
复杂对象的组装与创建——建造者模式(一):游戏角色设计,建造者模式概述
复杂对象的组装与创建——建造者模式(二):游戏角色设计的建造者模式解决方案
复杂对象的组装与创建——建造者模式(三):关于Director的进一步讨论,建造者模式总结

七个结构型模式

适配器模式-Adapter Pattern【学习难度:,使用频率:】

不兼容结构的协调——适配器模式(一):没有源码的算法库,适配器模式概述
不兼容结构的协调——适配器模式(二):没有源码的算法库的适配器模式解决方案
不兼容结构的协调——适配器模式(三):类适配器,双向适配器
不兼容结构的协调——适配器模式(四):缺省适配器,适配器模式总结

桥接模式-Bridge Pattern【学习难度:****,使用频率:********】
处理多维度变化——桥接模式(一):跨平台图像浏览系统
处理多维度变化——桥接模式(二):桥接模式概述
处理多维度变化——桥接模式(三):跨平台图像浏览系统的桥接模式解决方案
处理多维度变化——桥接模式(四):适配器模式与桥接模式的联用,桥接模式总结


组合模式-Composite Pattern【学习难度:,使用频率:】
树形结构的处理——组合模式(一):设计杀毒软件的框架结构
树形结构的处理——组合模式(二):组合模式概述
树形结构的处理——组合模式(三):杀毒软件的框架结构的组合模式解决方案
树形结构的处理——组合模式(四):透明组合模式与安全组合模式
树形结构的处理——组合模式(五):公司组织结构,组合模式总结


装饰模式-Decorator Pattern【学习难度:,使用频率:】
扩展系统功能——装饰模式(一):图形界面构件库的设计
扩展系统功能——装饰模式(二):装饰模式概述
扩展系统功能——装饰模式(三):图形界面构件库的装饰模式解决方案
扩展系统功能——装饰模式(四):透明装饰模式与半透明装饰模式,装饰模式注意事项,装饰模式总结


外观模式-Facade Pattern【学习难度:,使用频率:】
深入浅出外观模式(一):外观模式概述,外观模式结构与实现
深入浅出外观模式(二):外观模式应用实例(文件加密模块)
深入浅出外观模式(三):抽象外观类,外观模式效果与适用场景


享元模式-Flyweight Pattern【学习难度:,使用频率:】
实现对象的复用——享元模式(一):围棋棋子的设计,享元模式概述(上)
实现对象的复用——享元模式(二):享元模式概述(下)
实现对象的复用——享元模式(三):围棋棋子的享元模式解决方案
实现对象的复用——享元模式(四):带外部状态的围棋棋子解决方案
实现对象的复用——享元模式(五):单纯享元模式和复合享元模式,关于享元模式的几点补充,享元模式总结


代理模式-Proxy Pattern【学习难度:,使用频率:】

代理模式(一):代理模式概述,代理模式结构与实现
代理模式(二):代理模式应用实例(收费商务信息查询系统)
代理模式(三):远程代理,虚拟代理,缓冲代理
代理模式(四):代理模式效果与适用场景

十一个行为型模式

职责链模式-Chain of Responsibility Pattern【学习难度:,使用频率:】
请求的链式处理——职责链模式(一):采购单的分级审批
请求的链式处理——职责链模式(二):职责链模式概述
请求的链式处理——职责链模式(三):采购单分级审批的职责链模式解决方案
请求的链式处理——职责链模式(四):纯与不纯的职责链模式,职责链模式总结


命令模式-Command Pattern【学习难度:******,使用频率:********】**
请求发送者与接收者解耦——命令模式(一):自定义功能键,命令模式概述
请求发送者与接收者解耦——命令模式(二):自定义功能键的命令模式解决方案
请求发送者与接收者解耦——命令模式(三):命令队列的实现
请求发送者与接收者解耦——命令模式(四):撤销操作的简单实现
请求发送者与接收者解耦——命令模式(五):请求日志
请求发送者与接收者解耦——命令模式(六):宏命令,命令模式总结

解释器模式-Interpreter Pattern【学习难度:,使用频率:】
自定义语言的实现——解释器模式(一):机器人控制程序
自定义语言的实现——解释器模式(二):文法规则和抽象语法树
自定义语言的实现——解释器模式(三):解释器模式概述
自定义语言的实现——解释器模式(四):机器人控制程序的解释器模式解决方案
自定义语言的实现——解释器模式(五):再谈Context的作用
自定义语言的实现——解释器模式(六):解释器模式总结


迭代器模式-Iterator Pattern【学习难度:,使用频率:】
遍历聚合对象中的元素——迭代器模式(一):销售管理系统中数据的遍历
遍历聚合对象中的元素——迭代器模式(二):迭代器模式概述
遍历聚合对象中的元素——迭代器模式(三):销售管理系统中数据的遍历的迭代器模式解决方案
遍历聚合对象中的元素——迭代器模式(四):使用内部类实现迭代器
遍历聚合对象中的元素——迭代器模式(五):JDK内置迭代器的使用
遍历聚合对象中的元素——迭代器模式(六):迭代器模式总结

中介者模式-Mediator Pattern【学习难度:,使用频率:】
协调多个对象之间的交互——中介者模式(一):客户信息管理窗口的初始设计
协调多个对象之间的交互——中介者模式(二):中介者模式概述
协调多个对象之间的交互——中介者模式(三):客户信息管理窗口的中介者模式解决方案
协调多个对象之间的交互——中介者模式(四):中介者与同事类的扩展
协调多个对象之间的交互——中介者模式(五):中介者模式总结

备忘录模式-Memento Pattern【学习难度:,使用频率:】
撤销功能的实现——备忘录模式(一):可悔棋的中国象棋
撤销功能的实现——备忘录模式(二):备忘录模式概述
撤销功能的实现——备忘录模式(三):中国象棋的备忘录模式解决方案
撤销功能的实现——备忘录模式(四):实现多次撤销
撤销功能的实现——备忘录模式(五):再谈备忘录的封装,备忘录模式总结


观察者模式-Observer Pattern【学习难度:,使用频率:】
对象间的联动——观察者模式(一):多人联机对战游戏的设计
对象间的联动——观察者模式(二):观察者模式概述
对象间的联动——观察者模式(三):多人联机对战游戏的观察者模式解决方案
对象间的联动——观察者模式(四):JDK对观察者模式的支持
对象间的联动——观察者模式(五):观察者模式与Java事件处理
对象间的联动——观察者模式(六):观察者模式与MVC,观察者模式总结

状态模式-State Pattern【学习难度:,使用频率:】
处理对象的多种状态及其相互转换——状态模式(一):银行系统中的账户类设计
处理对象的多种状态及其相互转换——状态模式(二):状态模式概述
处理对象的多种状态及其相互转换——状态模式(三):账户类的状态模式解决方案
处理对象的多种状态及其相互转换——状态模式(四):共享状态的实现
处理对象的多种状态及其相互转换——状态模式(五):使用环境类实现状态转换
处理对象的多种状态及其相互转换——状态模式(六):状态模式总结

策略模式-Strategy Pattern【学习难度:,使用频率:】
符合的原则:开闭原则
算法的封装与切换——策略模式(一):电影票打折方案
算法的封装与切换——策略模式(二):策略模式概述
算法的封装与切换——策略模式(三):电影票打折方案的策略模式解决方案
算法的封装与切换——策略模式(四):策略模式的两个典型应用,策略模式总结

模板方法模式-Template Method Pattern【学习难度:,使用频率:】
模板方法模式深度解析(一):模板方法模式概述,模板方法模式结构与实现
模板方法模式深度解析(二):模板方法模式应用实例(银行利息计算模块)
模板方法模式深度解析(三):钩子方法的使用,模板方法模式效果与适用场景

访问者模式-Visitor Pattern【学习难度:,使用频率:】
操作复杂对象结构——访问者模式(一):OA系统中员工数据汇总
操作复杂对象结构——访问者模式(二):访问者模式概述
操作复杂对象结构——访问者模式(三):OA系统中员工数据汇总的访问者模式解决方案
操作复杂对象结构——访问者模式(四):访问者模式与组合模式联用,访问者模式总结


设计模式趣味学习(复习)

设计模式与足球(一):创建型模式
设计模式与足球(二):结构型模式
设计模式与足球(三):行为型模式(上)
设计模式与足球(四):行为型模式(下)


设计模式综合应用实例

多人联机射击游戏

多人联机射击游戏中的设计模式应用(一):抽象工厂模式,建造者模式,工厂方法模式,迭代器模式,命令模式多人联机射击游戏中的设计模式应用(二):观察者模式,单例模式,状态模式,适配器模式

数据库同步系统

设计模式综合实例分析之数据库同步系统(一):数据库同步系统概述,建造者模式,简单工厂模式设计模式综合实例分析之数据库同步系统(二):享元模式,单例模式,观察者模式,模板方法模式
设计模式综合实例分析之数据库同步系统(三):策略模式,组合模式,命令模式,职责链模式

最后补上一张设计模式之间的关系图

全家福

【作者:刘伟 http://blog.csdn.net/lovelion

参考

http://blog.csdn.net/lovelion/article/details/7563445
http://blog.csdn.net/vebasan/article/details/8003078
http://blog.csdn.net/vebasan/article/details/8003102
http://www.oracle.com/technetwork/articles/javase/jpl-proposals-140227.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,456评论 5 477
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,370评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,337评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,583评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,596评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,572评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,936评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,595评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,850评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,601评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,685评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,371评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,951评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,934评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,167评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 43,636评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,411评论 2 342

推荐阅读更多精彩内容

  • 圣诞献礼! 2012年-2013年,Sunny在CSDN技术博客中陆续发表了100多篇与设计模式学习相关的文章...
    AFinalStone阅读 791评论 1 13
  • 2012年-2013年,Sunny在CSDN技术博客中陆续发表了100多篇与设计模式学习相关的文章,涵盖了七个面向...
    火星抄手阅读 2,516评论 2 36
  • 设计模式汇总 一、基础知识 1. 设计模式概述 定义:设计模式(Design Pattern)是一套被反复使用、多...
    MinoyJet阅读 3,894评论 1 15
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 134,585评论 18 139
  • 这几天虽然指数没跌多少,但可能很多个股却跌了不少。越来越觉得赔钱容易赚钱难了。从大盘走势上看也证明了反弹可能已...
    交易的三根木头阅读 226评论 0 0