设计模式(Design Pattern)代表了最佳的实践,在面向对象的编程中被很多老鸟们反复使用。那么,使用设计模式究竟有哪些好处呢?看一看下面就知道了,其实还远不止这些好处。
- 可重用代码。
- 保证代码可靠性。
- 使代码更易被他人理解。
- ······
毫无疑问,设计模式于己、于人、于系统都是多赢的。设计模式之于程序员,就好比圣经之于耶稣信徒一样,意义可想而知!
什么是GoF?
谈及设计模式,必然离不开GoF。
GoF:Gang of Four,也称为"四人组",即EErich Gamma、Richard Helm、Ralph Johnson和John Vlissides这四人。
1990年软件工程界开始研讨设计模式的话题,后来召开了多次关于设计模式的研讨会。直到1995年艾瑞克·伽马、理査德·海尔姆、拉尔夫·约翰森、约翰·威利斯迪斯等4位作者合作出版了《设计模式:可复用面向对象软件的基础》这一本书,在此书中收录了23个设计模式,这是设计模式领域里程碑的事件,导致了软件设计模式的突破。这4位作者在软件开发领域里也以他们的"四人组"(Gang of Four,简称GoF)著称。
以上就是这四个人,都是远古大神了!高山仰止!
设计模式前置入门基础
作为初次学习设计模式的你,希望你能从下面这篇文章中了解到设计模式这门课的整个教程大纲。
阅读完下面这篇文章,我希望你能了解设计模式的概述,例如软件设计模式产生背景、软件设计模式的概念等等。
阅读完下面这篇文章,我希望你能知道怎样画UML类图。
最后,我希望你阅读完下面这6篇文章,能够对软件设计原则有一个比较清醒的认识。
- 从零开始学习Java设计模式 | 软件设计原则篇:开闭原则
- 从零开始学习Java设计模式 | 软件设计原则篇:里氏代换原则
- 从零开始学习Java设计模式 | 软件设计原则篇:依赖倒转原则
- 从零开始学习Java设计模式 | 软件设计原则篇:接口隔离原则
- 从零开始学习Java设计模式 | 软件设计原则篇:迪米特法则
- 从零开始学习Java设计模式 | 软件设计原则篇:合成复用原则
设计模式的分类
根据GoF四人组合作出版的《设计模式:可复用面向对象软件的基础》这一参考书,我想你应该要知道这四仙总共总结出来了23种设计模式,而且这些模式可以分为三类。
创建型模式
我希望你阅读完下面这5篇文章,能够知道并熟练掌握如下这5种创建型模式。
- 从零开始学习Java设计模式 | 创建型模式篇:单例设计模式
- 从零开始学习Java设计模式 | 创建型模式篇:工厂方法模式
- 从零开始学习Java设计模式 | 创建型模式篇:抽象工厂模式
- 从零开始学习Java设计模式 | 创建型模式篇:原型模式
- 从零开始学习Java设计模式 | 创建型模式篇:建造者模式
结构型模式
我希望你阅读完下面这7篇文章,能够知道并熟练掌握如下这7种结构型模式。
- 从零开始学习Java设计模式 | 结构型模式篇:代理模式
- 从零开始学习Java设计模式 | 结构型模式篇:适配器模式
- 从零开始学习Java设计模式 | 结构型模式篇:装饰者模式
- 从零开始学习Java设计模式 | 结构型模式篇:桥接模式
- 从零开始学习Java设计模式 | 结构型模式篇:外观模式
- 从零开始学习Java设计模式 | 结构型模式篇:组合模式
- 从零开始学习Java设计模式 | 结构型模式篇:享元模式
行为型模式
我希望你阅读完下面这11篇文章,能够知道并熟练掌握如下这11种行为型模式,虽然我知道这有点为难!
- 从零开始学习Java设计模式 | 行为型模式篇:模板方法模式
- 从零开始学习Java设计模式 | 行为型模式篇:策略模式
- 从零开始学习Java设计模式 | 行为型模式篇:命令模式
- 从零开始学习Java设计模式 | 行为型模式篇:责任链模式
- 从零开始学习Java设计模式 | 行为型模式篇:状态模式
- 从零开始学习Java设计模式 | 行为型模式篇:观察者模式
- 从零开始学习Java设计模式 | 行为型模式篇:中介者模式
- 从零开始学习Java设计模式 | 行为型模式篇:迭代器模式
- 从零开始学习Java设计模式 | 行为型模式篇:访问者模式
- 从零开始学习Java设计模式 | 行为型模式篇:备忘录模式
- 从零开始学习Java设计模式 | 行为型模式篇:解释器模式
自定义Spring框架
阅读完下面这4篇文章,我希望你能去自定义一个属于你自己的Spring框架,当然了,我在这里教给你的也只是简单的去模拟了一下Spring里面的IoC功能,我最最最重要的目的是希望你能了解设计模式在具体的开发中的使用。
- 我的自定义Spring框架 | 回顾Spring框架的基本使用
- 我的自定义Spring框架 | Spring核心功能结构
- 我的自定义Spring框架 | Spring IoC相关接口分析
- 我的自定义Spring框架 | 自定义Spring IoC功能
N问设计模式
GoF四人组提出的设计模式,至今仍被人津津乐道,但是你又了解多少呢?
你可能:
- 没听过
- 听说过,但不知道具体能干嘛
- 了解,会用其中的两三种
- 熟悉,能根据实际情况快速设计
- 精通,游刃有余
第一种:“虽然不懂你们在说什么,但是貌似很厉害的样子”。大牛才会用到的东西,高端而又神秘!
最后一种:“已上天,正和太阳肩并肩”。心中未曾想用设计模式,写出的代码却处处都是。倘若你和我一样,属于其他情况,嘿嘿😊,那么,就认真学习吧!
设计模式能带给你什么?
看下下面这张人类演变图。
从"猿猴→程序猿"的巨变,怎么样,是不是很炫酷啊?
有些人说设计模式没用,真是这样吗?
引用一句哲学名言:存在即合理。当然,若要扯非OO语言,也许真没什么用!但可以肯定的是,非OO语言完全可以借鉴OO的思想,设计模式也不例外!
设计模式有多重要?
要做一位大神或所谓的高手,基本之一就是要懂得若干设计模式。设计模式是软件工程的基石脉络,如同大厦的结构一样,你说有多重。
对了,还有面试要考!设计模式有多重要勿须我再费口舌了。
怎么学习设计模式?
设计模式不是基于理论发明的,而是先有问题场景,再基于需求和情景不断演化设计方案,最后把一些方案标准化成"模式"。
所以,通过实际案例学习是最好的!在讨论每一个设计模式时,要尽量用生活中的真实问题来理解和分析,然后尝试一步步地阐述设计,并以一个能匹配某些模式的设计收尾。
如何选择设计模式?
设计模式是针对某种情景下某种问题的某种解决方案,也就是说,每个模式都有自己的使用场景、使用方法和使用后果。正所谓物有两极,各模式也存在相应的优缺点,得其优,而避其劣,终得之!
为什么要写设计模式?
虽然设计模式被很多人念叨并不断书写,但是笔者还是决定追随前人的脚步,在前辈们的基础上整理出了这套设计模式系列教程,我衷心地希望大家都能通过我这套教程来学会设计模式,也算是不枉我一片苦心了!
鸣谢
写这篇文章,我参考了下面这篇文章很多,作者是一去丶二三里,虽然作者是用C++语言来讲述设计模式的,而笔者是用Java语言,但是大家要知道这两者都是殊途同归的。希望大家不要纠结于语言层面,而是多将注意力放在设计模式上。
最后,我是李阿昀,正在向一名优秀的程序员的路上前进,在此感谢大家抽空阅读!