自学内容网 自学内容网

创建模式、结构模式及行为模式

谁在什么地方提供什么功能?

要设计几个类?这些类各个是什么功能?相互间的关系是什么?

创建模式指的是对象那么多,怎么把它"生"出来?生几个?从这个角度上来说数组就是一种另类的创建模式。主要着眼于如何重用已有的代码和设计可重用的代码!

结构模式指的是应该定义多少个对象,多少个类,类和对象间要如何组织。比如说全局变量,我们可以以基本数据类型的形式定义,另一种就是将其按照一定的标准进行分类,定义"结构"。主要着眼与如何扩充代码!

行为模式指业务如何处理,先干什么,再干什么。但这部分内容和结构显然是密切相关的:同样是买房子,找中介和不找中介完全是两个流程。行为模式重点是解决代码中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)!