博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【设计模式】GoF设计模式学习总结
阅读量:6002 次
发布时间:2019-06-20

本文共 1357 字,大约阅读时间需要 4 分钟。

阅读目录

什么是设计模式

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

分类及定义

创建型模式(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)

迭代器模式:

观察者模式:

命令模式:

策略模式:

模板方法模式:

责任链模式:

状态模式:

备忘录模式:

中介者模式:

解释器模式:

访问者模式:

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

图片来自:

本文转自风一样的码农博客园博客,原文链接:http://www.cnblogs.com/chenpi/p/5222597.html,如需转载请自行联系原作者

你可能感兴趣的文章
从零开始搭建vue项目 请求拦截器 响应拦截器
查看>>
HDU3257 Hello World!【打印图案+位运算】
查看>>
jquery 选择器
查看>>
The secret code
查看>>
Makefile 多目录自动编译
查看>>
学习笔记:Oracle dul数据挖掘 导出Oracle11G数据文件坏块中表中
查看>>
统一Matlab下不同子图的色标colorbar
查看>>
Linux 进程间通信(二) 管道
查看>>
深入浅出JQuery (二) 选择器
查看>>
CI框架 -- 驱动器
查看>>
FastMQ V0.2.0 stable版发布
查看>>
对象复制
查看>>
Mongodb内嵌数组的完全匹配查询
查看>>
WARN hdfs.DFSClient: Caught exception java.lang.InterruptedException
查看>>
移动硬盘文件或目录损坏且无法读取怎么解决
查看>>
在shell中使用sed命令替换/为\/
查看>>
JavaSe: 不要小看了 Serializable
查看>>
Node.js 抓取电影天堂新上电影节目单及ftp链接
查看>>
linux popen函数
查看>>
[游戏开发]关于手游客户端网络带宽压力的一点思考
查看>>