创建模式、结构模式及行为模式
谁在什么地方提供什么功能?
要设计几个类?这些类各个是什么功能?相互间的关系是什么?
创建模式指的是对象那么多,怎么把它"生"出来?生几个?从这个角度上来说数组就是一种另类的创建模式。主要着眼于如何重用已有的代码和设计可重用的代码!
结构模式指的是应该定义多少个对象,多少个类,类和对象间要如何组织。比如说全局变量,我们可以以基本数据类型的形式定义,另一种就是将其按照一定的标准进行分类,定义"结构"。主要着眼与如何扩充代码!
行为模式指业务如何处理,先干什么,再干什么。但这部分内容和结构显然是密切相关的:同样是买房子,找中介和不找中介完全是两个流程。行为模式重点是解决代码中if-else过多的问题。这可能是最复杂的内容。主要着眼于如何减低代码间的耦合和代码结构的复杂性。
5种创建模式,7种结构模式,11种行为模式
设计软件就像写文章,架构是谋篇布局,设计模式是段落(章节)安排,习惯法是遣词造句!
-
Creational patterns provide object creation mechanisms that increase flexibility and reuse of existing code.
-
Structural patterns explain how to assemble objects and classes into larger structures, while keeping these structures flexible and efficient.
-
Behavioral patterns take care of effective communication and the assignment of responsibilities between objects.
从另外一个角度思考:---C语言
什么类不类的,对象不对象的,一直到最底层!
创建模式是关于如何创建变量的,结构模式是关于定义如何扩展变量和函数以获得更大的变量和函数,行为模式是关于定义函数。
实现这些模式要实现适当的结构和函数,但是总体来看这些代价是值得的,提升了系统的柔性和效率(flexible &efficient)。
1.创建模式:--主要解决变量定义问题
比如要处理学生的信息,如成绩语数外,我们可以定义3个变量,一行即可。如果要处理1万个学生的信息,不仅是语数外,还有其他信息,如姓名、性别、学校等,当然还有姓名,那每个学生有7个数据项,1万个学生要定义7万个变量,这时候按简单变量的方式定义的话就把自己搞死了,可以将学生的信息定义一个结构,然后定义一个有1万个元素的数组,这也是一种创建模式。
变量的定义包括2个内容:命名及初始化。
- 工厂模式用于生成一类变量;
- 抽象工厂模式可以生成多类变量;
- 建造者模式可以生成复杂变量,涉及大量参数:将初始化过程分成多个步骤;
- 原型模式用于批量生成一批对象(游戏中的小兵,炮灰都类似):生成一个,复制、拷贝,修改;
- 单例模式确保只生成一个对象:用静态变量。
2.结构模式:---主要解决函数及变量的定义问题--》如何在减少不必要的定义同时,保持效率和灵活性。
- 适配器模式:加了一个中间层(适配器),别人变了我可以不变,我变了,别人可以不变
- 桥接模式:变与不变分开,比如红色铅笔,蓝色钢笔,黑色毛笔等等,不如只定义笔和颜色,然后进行组合;
- 组合模式:处理树型结构,节点和叶子是不同的,但是可以看做一样来处理,形式简洁
- 装饰器模式:俄罗斯套娃
- 享元模式:精兵简政,共用;像组织中的司机,原来每位高管有一位对应的司机,现在几位高管用一个司机;类似的还有将重复的代码组织成函数,其他各处调用即可
- 代理模式:都经过它处理,其余你就不管了;
- 外观模式:为程序库、框架或其他数据或函数等提供一个简单的接口。都经过它转交,它自己不处理交给别人处理,内部的复杂关系我不管;有点像每个单位的门房的作用,原来外部人员办事乱糟糟,现在把材料交给门房即可,过段时间来找他问结果。与代理模式不同的是外观模式自己对数据是不处理的,它转交给别人
3.行为模式:--解决函数问题--》重组数据处理流程、简化函数结构,减少if-else结构;简化调用关系。
- 中介者模式:多对多的关系转变为多对一的关系,类似于多个医院与多个医药公司采购药物,转变为医药集采。
- 访问者模式:根据数据不同采用不同的处理方式。
- 观察者模式:多对一的关系变为一对多的关系。事件订阅。每家每户到邮局取信(多对一)变化邮局将信投递到每家每户(一对多)
- 责任链模式:有专门的链条记录每个处理环节。首问负责制,且确保问题一定会有人处理的
- 模板模式:流程固定,每个环节可以变化
- 备忘录模式:有专门的结构用来记录状态的,以便回溯
- 状态模式:状态的处理和状态的转换结合。有状态和状态机,状态机负责执行,状态负责处理机状态的转换,非常常用和典型
- 解释器模式:提炼了一个解释器,对不同的文本处理,先有解释器处理后再根据解释的结构进行处理;类似与高级语言处理过程
- 迭代器模式:提供一个迭代器,将非线性的结构变为线性的,每一项处理有自己的前序和后继
- 命令模式:将命令打包,存入队列。命令和处理相分离。
- 策略模式:将数据与数据的处理分离,数据可以相同,但是处理的方法策略不同。
创建模式 | 单例模式(Singleton) | 独一无二,全局唯一 | 如何创建变量 --如何创建对象? | |
抽象工厂(Abstract Factory ) | 产品族,创建系列 | |||
原型模式(Prototype) | 复制粘贴,一模一样 | |||
工厂模式(Factory) | 创建产品,子类定制 | |||
建造者模式(Builder) | 一步一步,构建复杂 | |||
结构模式 | 组合模式(Composite) | 树状结构,递归遍历 | 如何组织数据及函数 函数和数据如何变大而不失灵活性(底层越巩固上层越灵活)? 负责如何将对象和类组装成较大的结构? 如何尽量定义越少的数据结构和函数而不失灵活性? | |
数据组织 | ||||
享元模式(Flyweight) | 共享对象,节省内存 | |||
个人信息记录,省份信息可以用1~34 数据组织 | ||||
桥接模式(Brideg) | 抽象和实现,解耦合 | |||
2个维度变化 | ||||
数据和函数 | ||||
适配器模式(Adapter) | 接口不同,转换器 | |||
左右对不上 | ||||
代理模式(Proxy) | 控制访问,增加安全 | |||
代理服务器? | ||||
外观模式(Facade) | 统一接口,简化调用 | |||
Linux中的VFS? | ||||
装饰器模式(Decorator) | 包装对象,增强功能 | |||
B包含A,C包含A,D包含B,... | ||||
数据和函数 | ||||
行为模式 | 中介者模式(Mdiator) | 统一协调,对象解耦 | 如何处理数据(如何定义函数) --对象间如何高效沟通和职责委派 | |
从多对多变为多对一 | ||||
观察者模式(Observer) | 一对多,消息通知 | |||
产生消息的函数启动接收消息的函数,接受消息的函数才处理 | ||||
访问者模式(Visitor) | 操作对象,分离算法 | |||
责任链模式(Chain of Resonsibility) | 链式处理,一环接一环 | |||
模板模式(Template) | 抽象父类,子类实现 | |||
流程一致,每步不同 | ||||
备忘录模式(Memento) | 状态保持回复原状 | |||
状态模式(State) | 状态切换,行为变化 | |||
行为处理与行为变化封装一起 | ||||
解释器模式(interpreter) | 识别文法,构建解释 | |||
迭代器模式(Iterator) | 遍历集合,无需暴露 | |||
命令模式(Command) | 请求封装解耦合 | |||
策略模式(Stategy) | 算法替代,灵活变化 | |||
原文地址:https://blog.csdn.net/wxg_wuchujie88/article/details/125843144
免责声明:本站文章内容转载自网络资源,如本站内容侵犯了原著者的合法权益,可联系本站删除。更多内容请关注自学内容网(zxcms.com)!