开发者学堂课程【Scala 核心编程 - 进阶:设计模式的分类】学习笔记,与课程紧密连接,让用户快速学习知识。
课程地址:https://developer.aliyun.com/learning/course/610/detail/9130
设计模式的分类
内容介绍:
一、设计模式介绍
二、设计模式的分类
一、设计模式介绍
1、概念
设计模式(Design pattern)是程序员在面对同类软件工程设计问题所总结出来的有用的经验,模式并不是代码。
模式更多的是站在一种设计或者思想层面的问题,而是通过代码得以实现,是某类事情通用的解决方案,如 scala、Java、Go 语言等等都有设计模式,甚至在生活中不涉及编程语言的情况下也仍旧存在。
其似乎是比较空泛的内容,但实际上确确实实有着独有的好处,它代表了最佳的实践。这些解决方案是众多的软件开发人员经过相当长的一段时间的试验和错误总结出来的。
2、本质
设计模式的本质是为了提高软件的维护性、通用性和扩展性,并降低软件的复杂度,也就是使得软件简单的同时效率也高。原先写代码时追求简单,但简单的同时伴随着较难维护的难题。如上世纪70年代出现的“软件巨兽”的问题,当时几大公司一同开发,后来却发现该软件已经失控了,而没有工程的概念。
于是,70年代,德国某城市召开了世界第一次软件工程大会,才提出了软件工程的概念。
拥有几百年历史的行业,如机械行业,机械的制造过程便开始引入某些概念灌输到软件中,开始进入正式的软件工程设计了。
3.经典参考书目
有一本叫作《设计模式》的书尤为经典,作者为 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissiddes Design,即 GOF,俗称“四人组”,该本书至今仍然影响深远。我们的课程中关于设计模式的讲解基本是按照他们的思路来设计的。
4.设计模式并不局限于某种语言
java、php、c++等都有设计模式。
二、设计模式的分类
设计模式分为三种类型,共23种(但不同的书籍对分类和名称略有差别,故有的书上讲到的不是23种,我们的课程以“四人组”的《设计模式》为参考):
1.创建型模式
以创建为主,解决创建型问题的设计模式。包括单例模式、抽象工厂模式、建造者模式、工厂模式、原型模式。
2.结构型模式
防止程序类爆炸的设计模式。包括适配器模式、桥接模式、装饰模式、组合模式、外观模式、享元模式、代理模式。
3.行为型模式
该种设计模式往往是一种动态的控制,如要完成方法的调用等。
包括模版方法模式、命令模式、迭代器模式、观察者模式、中介者模式、备忘录模式、解释器模式(Interpreter莫式)、状态模式、策略模式、职责链模式(责任链模式)、访问者模式。
考虑到时间原因及实用性原则,单例模式、抽象工厂模式、工厂模式、装饰模式、代理模式、观察者模式是我们课程中会学习到的设计模式,其他的部分设计模式使用频率较低,甚至很容易与其他设计模式混淆,因此不作为本次课程的学习内容。
对于设计模式的名称和分类没有准确的答案,因为设计模式没有人可以设计。
如 scala 的权威 Martin Odersky,java 的权威是其创始人詹姆斯·高斯林,但设计模式并不是由某个人创造的,它是一种大家在开发过程中总结出来的效果较好的编程模式,甚至在论坛等处随处可见,没有标准答案。
但是该分类模式基本上是大部分人所公认的一种分类方式。