当前位置: 首页 > news >正文

【设计模式】GoF设计模式学习总结

什么是设计模式

为解决某一类普遍存在的问题而提供的一种解决方案;

分类及定义

创建型模式(5)

1、原型模式:通过复制一个已存在对象来生成一个新对象,被复制的对象称为原型;详情...

2、单例模式:一个类只有一个全局实例;详情...

3、生成器模式:对复杂对象的创建过程进行抽象,相同的创建步骤,不一样的创建过程实现,生成不同表示的对象;详情...

4、工厂方法模式:具体的工厂对象负责生产具体的产品对象;详情...

5、抽象工厂模式:就是对一组具有相同主题的工厂进行封装;详情...

简单工厂模式:一个工厂方法,依据传入的参数,生成对应的具体产品对象;//不属于gof-23 详情...

结构型模式(7)

1、装饰模式:通过关联机制给类增加行为,其行为的扩展由修饰对象来决定;详情...

2、享元模式:大量细粒度对象共享复用;详情...

3、桥接模式:将对象的行为抽象为接口,作为抽象类的成员属性在抽象层进行组合;详情...

4、组合模式:树形结构的实现,用于描述“整体-部分”的关系;详情...

5、外观模式:在子系统中的接口之上定义一个更高层次的接口,方便使用子系统中的接口;详情...

6、代理模式:通过代理对象间接控制并访问目标对象的方法;详情...

7、适配器模式:适配器是将一种接口改造成另外一种接口的一个包装类;详情...

行为型模式(11)

1、解释器模式:定义一些语法规则,然后定义一个解析器去解析该语法;详情...

2、访问者模式:在不修改已有程序结构的前提下,通过添加额外的“访问者”来完成对已有代码功能的提升;详情...

3、备忘录模式:保存对象的某个状态并可以恢复到该状态;详情...

4、中介者模式:对象之间通过中介者对象进行交互,而不是直接交互;详情...

5、模板方法模式:使用了JAVA的继承机制,在抽象类中定义一个模板方法,该方法引用了若干个抽象方法(由子类实现)或具体方法;详情...

6、责任链模式:为请求创建一个接收者对象的链,每个接收者包含对另一个接收者的引用,当某个接受者不能处理该请求时,将请求转给下一个接受者;详情...

7、命令模式:将请求封装成命令对象,请求的具体执行由命令接收者执行;详情...

8、状态模式:一个对象的行为根据其内部状态的改变自动变化;详情...

9、策略模式:对象的行为,在不同的环境下,有不同的实现;详情...

10、迭代器模式:提供一种方法访问一个容器对象中各个元素,而又不需暴露该对象的内部细节。详情...

11、观察者模式:一对多的关系,又叫发布-订阅模式,即一个对象的状态发生变化,所有依赖它的对象能够知道该变化并自动更新;详情...

涉及的相关的设计原则

  • 单一职责原则
  • 里氏替换原则
  • 依赖倒置原则
  • 接口隔离原则
  • 迪米特法则
  • 开闭原则

使用频率排序

创建型模式(5)

工厂方法模式:★★★★★

抽象工厂模式:★★★★★

单例模式:★★★★☆

简单工厂模式:★★★★☆            //不属于gof-23

原型模式:★★☆☆

生成器模式:★★☆☆

结构型模式(7)

外观模式:★★★★★

代理模式:★★★★☆

组合模式:★★★★☆

适配器模式:★★★★☆

桥接模式:★★☆☆

装饰模式:★★☆☆

享元模式:☆☆

行为型模式(11)

迭代器模式:★★★★★

观察者模式:★★★★★

命令模式:★★★★☆

策略模式:★★★★☆

模板方法模式:★★★☆☆

责任链模式:★★☆☆

状态模式:★★☆☆

备忘录模式:★★☆☆

中介者模式:★★☆☆

解释器模式:☆☆

访问者模式:☆☆

另外,网上看到一张图片,总结的挺好的

图片来自:链接

转载于:https://www.cnblogs.com/chenpi/p/5222597.html

相关文章:

  • 毛毛雨的博客乐园—内容简介
  • Android布局— — —表格布局
  • Linux统计文件/目录数量ls -l | grep ^- | wc -l匹配开头和结尾
  • 老男孩28期运维张帅学习Linux决心书
  • Mongo读书笔记2 -- 数据类型
  • OC----简单的购物系统----
  • spring四种依赖注入方式
  • Swift2.0(17)内存管理ARC
  • 转:Vim实战指南(四):ex命令
  • Eclipse配置信息
  • 如何在CentOS 5/6上安装EPEL源
  • csu 1600: Twenty-four point
  • 常用的Linux操作命令(一)
  • 2014103《JAVA程序设计》第一周学习总结
  • 2月第4周网络安全报告:境内69.1万主机感染病毒
  • 深入了解以太坊
  • 分享的文章《人生如棋》
  • “大数据应用场景”之隔壁老王(连载四)
  • 【跃迁之路】【733天】程序员高效学习方法论探索系列(实验阶段490-2019.2.23)...
  • 5分钟即可掌握的前端高效利器:JavaScript 策略模式
  • Docker: 容器互访的三种方式
  • Git学习与使用心得(1)—— 初始化
  • java2019面试题北京
  • JS题目及答案整理
  • Lsb图片隐写
  • MySQL数据库运维之数据恢复
  • 百度小程序遇到的问题
  • 七牛云 DV OV EV SSL 证书上线,限时折扣低至 6.75 折!
  • 网页视频流m3u8/ts视频下载
  • 微信小程序开发问题汇总
  • - 转 Ext2.0 form使用实例
  • 《TCP IP 详解卷1:协议》阅读笔记 - 第六章
  • (007)XHTML文档之标题——h1~h6
  • (02)Hive SQL编译成MapReduce任务的过程
  • (a /b)*c的值
  • (Forward) Music Player: From UI Proposal to Code
  • (MonoGame从入门到放弃-1) MonoGame环境搭建
  • (windows2012共享文件夹和防火墙设置
  • (附源码)springboot工单管理系统 毕业设计 964158
  • (离散数学)逻辑连接词
  • (十) 初识 Docker file
  • (十八)三元表达式和列表解析
  • (原創) 如何刪除Windows Live Writer留在本機的文章? (Web) (Windows Live Writer)
  • *p=a是把a的值赋给p,p=a是把a的地址赋给p。
  • ..回顾17,展望18
  • .NET 6 Mysql Canal (CDC 增量同步,捕获变更数据) 案例版
  • .NET Core中的去虚
  • .NET 中创建支持集合初始化器的类型
  • .NET/C# 使用反射调用含 ref 或 out 参数的方法
  • .NET精简框架的“无法找到资源程序集”异常释疑
  • .NET企业级应用架构设计系列之应用服务器
  • .sh文件怎么运行_创建优化的Go镜像文件以及踩过的坑
  • @Bean, @Component, @Configuration简析
  • [ C++ ] STL_list 使用及其模拟实现
  • [ 蓝桥杯Web真题 ]-布局切换