最近在项目组前辈的驱动下做一些简单的系统设计工作,发现自己很多理论知识还是欠缺或者有些东西还只是停留在概念的似懂非懂层面,所以觉得应该重新整理一下沉睡在大脑里面的知识,一方面为自己在做设计的时候提供理论支撑,一方面也希望能够给读者有一点点的启发。这将会是公众号接下来的一些列文章,每周会推出两篇左右的文章。
这篇文章先简单介绍一些模式相关的概念,是本人结合书本和自己实践的理解,难免会有错误的地方,欢迎加QQ群【599791743】探讨。
什么是模式
模式是什么?职业本能,大家马上会想到代码的设计模式,系统的架构模式等。但是,模式远不止这些。模式应用的领域很多,包括建筑、软件、机械......
那么,如何给模式下一个定义呢?
模式是对一类问题和一类问题解决方法的抽象
如何理解一类问题和一类问题的解决方法的抽象?
首先,一类问题是指具有相同本质东西的问题,以及这些问题的解决方案也具有相同本质。抽象就是把这类问题和解决方案基本框架抽取出来,具体框架里面怎么填充可以根据实际的具体问题有不同的实现方式。
打个比方,我们最初使用的Web系统三层架构模式的时候,通常的架构模式是控制层、业务层和持久化层。这三层构成的系统架构模式就是一个框架,根据不同的系统,控制层、业务层和持久化层要做的东西不同。在这里,系统的三层架构是对这类Web系统问题解决方法的抽象,不同的Web系统处需要处理的数据流转问题是不同的具体问题。
通常,软件开发领域,我们经常接触的有代码的组织模式、代码的设计模式,系统的架构模式等
模式有哪些要素
要准确描述一个模式不是那么简单,我们在描述一个模式的时候,尽量考虑到如下要素:
- 名字:每一个模式都应该有一个见名知义的名字,应该让别人能够领会到这个模式是用来做什么的的。比如适配器设计模式,我们通过名字“适配器”可以理解为这个模式是为了解决一些适配问题而存在的
- 问题:问题是模式要解决的一类问题的抽象,不是具体某一问题。因为不同形式的问题往往具有相同的本质,模式就是解决本质问题的。比如工厂模式,如果把该模式解决的问题描述为是为了解决创建多个XXX对象而存在的那么就不是那么准确了,我们应该描述为工厂模式是为了简化对象的创建繁琐过程以及降低代码耦合度。当然,这样的描述还不够准确,读者可以试着自己描述一下。
- 环境:环境描述了模式的适用范围,也就是解决此类问题的模式存在的大背景
- 力:力是描述与模式相关的力和约束,也就是使用此模式需要的付出的代价以及带来的好处,这些代价和好处是怎么相互影响的
- 解答:解答描述的是模式是如何解决问题的
- 举例:举例描述的是模式应用到一个具体形式的问题的整个过程,包括问题本质是什么,解决方法是什么,如何构建解决方法,使用此解决方法好处与副作用是什么等等
- 末态环境:末态环境描述的是力的解决,模式解决了什么力,以及什么力还没有解决。此模式涉及其它的什么模式,以及好处和坏处是什么等
- 推理:推理描述的是模式解决问题的整体过程,包括步骤、规则、好处和坏处等
- 其它相关模式:其它相关模式描述的是模式和其它模式的关系等
- 已知的应用:已知的应用和举例类似,但是已知的应用描述的范围更广一点,它描述的是模式如何在已有的系统中出现和应用的
欢迎持续关注本公众号,更多文章等待与读者见面!