23种设计模式的简单理解

news/2024/10/28 20:31:07/

23种设计模式的设计原则为:

1、开闭原则           

2、单一职责原则                           

3、依赖倒置原则

4、里氏替换原则   

5、迪米特原则(最小知道原则)   

6、组合复用原则

 

23种设计模式可分为三种大的类型

一、创建型

1、工厂模式(Factory):

    分为简单工厂模式和工厂方法模式。

    简单工厂模式也称为静态工厂模式,一般是用类的静态方法实现的,涉及角色有简单工厂,抽象产品,具体产品。个人的简单理解:向静态方法传不同的标识,在方法中根据标识的不同构建不同的对象,然后返回构建的对象。

简单工厂模式的结构图

   工厂方法模式涉及角色:抽象工厂、具体工厂、抽象产品、具体产品。个人的简单理解:一个工厂只能生产一种产品。具体工厂来生成具体的产品, 每多一个产品就要有一个对应的工厂,工厂与产品一一对应。

工厂方法模式的结构图

2、抽象工厂模式(AbstractFactory):

   抽象工厂模式涉及角色:抽象工厂、具体工厂、抽象产品、具体产品。个人的简单理解:一个工厂可以生产多种产品。比如说冰箱、电视、洗衣机,海尔可以生产,海信可以生产,美的也可以生产,但是每家工厂生产出来的冰箱、电视、洗衣机外型功能可以各不相同。

抽象工厂模式的结构图

3、建造者模式(Bulider):

  建造者模式将复杂对象的构建与它的表示分离,涉及角色为:产品、抽象建造者、具体建造者、指挥者。个人的简单理解:比如要生产一辆自行车,只需要告诉指挥者需要哪种类型的自行车,指挥者就会调用哪种类型的建造者来生产自行车,具体的生产过程不需要知晓和参与。

建造者模式的结构图

4、单例模式(Singleton):

单例模式涉及角色:单例类、访问类。个人的简单理解:一个类只能产生唯一的一个实例对象。

单例模式的结构图

5、原型模式(Prototype):

原型模式涉及角色:抽象原型类、具体原型类、访问类。个人的简单理解:通过克隆来实现对象的复制。

原型模式的结构图

 

二、结构型

1、代理模式(Proxy):

   代理模式可分为静态代理模式和动态代理模式,涉及角色:抽象主题、真实主题、代理类。

    静态代理模式可以理解代理类在编译是生成,即需要编码代理类。

    动态代理模式可以理解为调用了反射功能来实现代理功能,如JAVA中的Proxy中的newProxyInstance方法。

   个人的简单理解:可以将真实主题想像为明星代理想象成明星的经纪人,在明星参加商业活动前的合约谈判和活动后的善后工作都是有经纪人来完成的,在活动中需要明星亲自参与,如AOP实现了代理。

代理模式的结构图

2、适配器模式(Adapter):

   适配器模式是将一个接口转化为另一个接口,涉及角色:目标接口、适配者类、适配器类。个人的简单理解:可以想像成 USB 与  Type-C 的转换器。

类适配器模式的结构图

3、桥接模式(Bridge):

   桥接模式将抽象与实现分离,使它们可以独立变化,涉及角色:抽象化角色、扩展抽象化角色、实现化角色、具体实现化角色。个人的简单理解:可以想像成表格,有X、Y两个不同的维度,一个单元格要同时有X、Y两个坐标,但两个坐标不是并列关系(X,Y),是主副关系 X(Y)。

桥接模式的结构图

4、装饰模式(Decorator):

    装饰模式是在不改变现在对象结构的情况下,动态增加对象的职责,涉及的角色:抽象构件角色、具体构件角色、抽象装饰角色、具体装饰角色。个人的简单理解:可以看成游戏中的人物,给人物加连续不同的装备可以实现不同的技能。

装饰模式的结构图

5、外观模式(Facade):

    外观模式涉及角色:外观角色、子系统角色、客户角色。个人的简单理解:实现了客户对一个接口的调用,完成了对多个个子系统接口的统一调用。

外观模式的结构图

6、享元模式(Flyweight):

   享元模式对象的信息分为两个部分:内部状态和外部状态(内部状态指对象共享出来的信息,存储在享元信息内部,并且不回随环境的改变而改变;外部状态指对象得以依赖的一个标记,随环境的改变而改变,不可共享),涉及角色:抽象享元角色、具体享元角色、非享元角色、享元工厂角色。个人的简单理解:可以把该模式想成池应用,如共享池、数据库连接池等。

享元模式的结构图

7、组合模式(Composite):

   组合模式也称为整体部分模式,是一种树状的层次模式,涉及角色:抽象构件角色、树叶构件角色、树枝构件角色。个人的简单理解:可以理解windows管理器中的树状目录结构。

透明式的组合模式的结构图

 

三、行为型

1、模板方法模式(TemplateMethod):

   模板方法模式定义一个操作中的算法骨架,而将算法的一些步骤延迟到子类中,使得子类可以实现特定的处理,涉及角色:抽象类/抽象模板、具体子类/具体实现。个人的简单理解:可以想像一下银行的取号、业务办理、评价功能,取号和评价功能可以是统一一致的处理,但是业务办理需要根据具体的业务来处理。

模板方法模式的结构图

2、策略模式(Strategy):

    策略模式定义了一系统算法,并将算法封装起来,算法可以相互替换,算法的变化不会影响使用算法的客户,涉及的角色为:抽象策略类、具体策略类、环境类。个人的简单理解:将简化if..else if... 或 switch... case ...的实现,需要哪种策略算法,就把哪种策略算法给到环境类。

策略模式的结构图

3、命令模式(Command):

   命令模式涉及角色:抽象命令类、具体命令类、实现者/接收者、调用者/请求者。个人的简单理解:可以将命令想像为餐馆的点菜单,服务员是调用者,厨师是接收者,服务员将客户的点菜单交给厨师,厨师根据菜单来做菜。

命令模式的结构图

4、责任链模式(ChainOfResponsibility):

   责任链模式将所有请求按照给定的顺序传递处理,涉及角色:抽象处理者、具体处理者、客户类。个人的简单理解:可以想像成请求中的过滤器/拦截器,或者 公司流程中的报销单流程。

责任链模式的结构图

5、状态模式(State):

   状态模式把复杂的“判断逻辑”提取到不同的状态对象中,允许状态对象在其内部状态发生改变时改变其行为,涉及角色:环境类、抽象状态、具体状态。个人的简单理解:将状态作了封装,在状态类中实现对状态的转化和处理,可以想像成进程的3态或5态转换。

状态模式的结构图

6、观察者模式(Observer):

    观察者模式又称发布订阅模式,主要是一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新,涉及角色:抽象主题、具体主题、抽象观察者、具体观察者。个人的简单理解:可以想像一下博客中的订阅功能。

观察者模式的结构图

7、中介者模式(Mediator):

   中介者模式也叫调停模式,用来将网状的结构转为星形结构,降低耦合性,涉及角色:抽象中介者、具体中介者、抽象同事类、具体同事类。个人的简单理解:可以想像一下房屋中介的功能,中介即要面对多位卖家,也要面对多家卖家。

中介者模式的结构图

8、访问者模式(Visitor):

    访问者模式主要对集合中的不同类型数据进行多种操作,涉及角色:抽象访问者、具体访问者、抽象元素、具体元素、对象结构。个人的简单理解:根据关注点的不同,实现不同的处理,如对一个程序员,ceo和cto对程序员的考核不一样:ceo关注KPI,cto关注功能和代码质量。

访问者(Visitor)模式的结构图

9、迭代器模式(Iterator):

   迭代器模式提供一个对象来顺序访问聚合对象中的一系列数据,涉及角色:抽象聚合、具体聚合、抽象迭代器、具体迭代器。个人的简单理解:可以想像一下java集合类的遍历。

迭代器模式的结构图

10、备忘录模式(Memento):

   备忘录模式主要保存对象的状态,以便将对象回复到原先的保存状态,涉及角色:发起人、备忘录、管理者。个人的简单理解:可以想像一下word中的ctrl+z功能。

备忘录模式的结构图

11、解释器模式(Interpreter):

   解释器模式实现对一些特定文法的解析,涉及角色:抽象表达式、终结符表达式、非终结符表达式、环境、客户端。个人的简单理解:可以想象一下编译原理的实现。

解释器模式的结构图

 

设计模式文章学习: http://c.biancheng.net/design_pattern/

设计模式视频学习:https://www.bilibili.com/video/BV1zZ4y1W7Gb?p=1


http://www.ppmy.cn/news/597903.html

相关文章

计算机应用大专生简历,计算机应用大专生简历范文

以下是无忧考网为大家整理的关于计算机应用大专生简历范文的文章,希望大家能够喜欢! 基本资料 姓  名: 林女士 性  别: 女 民  族: 汉族 出生日期: 1988年08月20日 户  口: 安徽省 学 …

大专生计算机水平个人简历,2011计算机大专生简历范文

姓  名: 林女士 性  别: 女 民  族: 汉族 出生日期: 1988年08月20日 户  口: 安徽省 学  历: 大专 技术职称: 高级 毕业院校: 安庆职业技术学院 所学专业: 计算…

MySQL笔记详解

MySQL – 2021 文章目录 MySQL[toc]1.介绍1.1 mysql的特点1.2 SQL语言的组成1.3 非关系型数据库 2. 数据库操作2.1 数据库的常用操作(DDL)2.2 数据库表的操作(DDL)2.3 数据库的基本操作(DML)2.3.1 数据插入:insert2.3.2 数据修改:update2.3.3 数据删除&…

javascript高级(三)

函数 创建函数的三种方式 1.function声明的普通函数(命名函数) 2.函数表达式(匿名函数) 3.new Function() var fn new Function(‘参数1’,‘参数2’,…,函数体); Function()里面的参数都是字符串格式 所有的函数…

JS高级-ES6语法汇总及案例练习

js方法文档 mdn 1.类和对象 类中属性和方法 // 1.创建类class 创建一个明星类习惯定义首字母大写class Star {// 类的共有属性放到constructor里面constructor(uname, age) {this.uname uname;this.age age;}sing(song) {console.log(this.uname 唱 song);}}// 2.利用类…

python电商评论情感分析_电商产品评论数据情感分析

来自:Python数据分析与挖掘实战——张良均著 1. 分析方法与过程 本次建模针对京东商城上“美的”品牌热水器的消费者评论数据,在对文本进行基本的机器预处理、中文分词、停用词过滤后,通过建立包括栈式自编码深度学习、语义网络与LDA主题模型等多种数据挖掘模型,实现对文本…

《Python数据分析与挖掘实战》第15章 ——电商产品评论数据情感分析(LED)

文章目录 1.挖掘背景与目标2.2 数据探索与预处理2.1 数据筛选2.2 数据去重2.3 删除前缀评分2.4 jieba分词 3 基于LDA 模型的主题分析4.权重5.如何在主题空间比较两两文档之间的相似度 本文是基于《Python数据分析与挖掘实战》的实战部分的第15章的数据——《电商产品评论数据情…

考研英语 - word-list-15

每天十个单词,本博客收集整理自《考研英语词汇》,仅供学习和个人积累。 新东方单词在线阅读地址 ,希望这个链接一直都有效 :) 2017年03月28日 08:08:29 erosion 词义: n.腐蚀,磨损;削弱,减少例…