前言
参考:C++设计模式 – 李建忠 – 视频 | 【大话设计模式 – 吴强 – 书籍】第一章 设计模式概述
分解与抽象
分解:人们面对复杂性有一个常见的做法:即分而治之,将大问题分解为多个小问题,将复杂问题分解为多个简单问题。
抽象:更高层次来讲,人们处理复杂性有一个通用的技术,即抽象。由于不能掌握全部的复杂对象,我们选择忽视它的非本质细节而去处理泛化和理想化了的对象模型。
总结为一句话:用分解来分割任务(解耦合),用抽象来提高复用性对抗变化(高复用),减少工作量。总目标就是为了能复用。
举个栗子🌰
我最近在翻看一本医学的科普书籍《肠子的小心思》,大体明白了食物到💩的过程。
流程如下:食物进入口腔的咀嚼,经过食管到胃部;胃就像一个搅拌机把食物搅碎,然后输送到小肠;小肠从食物中提取营养物质通过血液输送到肝脏;肝脏检查和消灭其中的有毒物质;养分满满的血液离开肝脏后直奔心脏;心脏将血液泵送到全身,给全身的细胞供能;至于没有养分的食物渣渣被运行到大肠;大肠将其缩水塑性后,形成便便;待便便足量的时候,触发排便反应,大便从肛门排除。
关于这个流程,可以简单参看下这个视频:知道你为啥便秘吗?也许是你的肠道太懒了!
此时我们如何编程来表达这整个流程呢?
分解
把整个消化道系统分解:口腔、食管、胃、小肠、大肠、肛管
每一部分抽象成一个类,然后编程。
抽象
假如上面我们是以人这类动物的消化道进行建模的。如果我们想扩展到整个自然界的动物,这个模型可能有些不适用。(我不了解生物,是这样吗?想来大千世界,总有奇奇怪怪/可可爱爱的动物和人类的消化道模型不同?)
此时,我们需要需要以抽象的方式来思考这个问题,建立一个能给自然界所有生物都能复用的模型。
我们的模型分为这几个部分:搅碎食物、吸收营养、排除废物。
之后,每一个动物,以这个抽象为蓝本,根据自己的实际情况,实现自己的消化系统。