常用的几种设计模式总结

本文介绍了设计模式的三大类别:创建型、结构型和行为型。创建型模式包括单例模式(懒汉、饿汉模式)和工厂模式(简单工厂、工厂方法、抽象工厂);结构型模式关注类和对象的组合,以装饰模式为例;行为型模式涉及类和对象的交互,观察者模式作为示例。文章通过实例解析了各模式的使用和优缺点。
摘要由CSDN通过智能技术生成

前言

记录记录我理解的设计模式

设计模式主要分为三大类:
创建型设计模式:对象的创建问题,封装复杂的创建问题。
结构型设计模式:类或对象组合在一起的问题,应用于一些特定的场景。
行为型设计模式:类和对象的交互问题。

目前只理解了 创建型设计模式中的单例模式和工厂模式;结构型设计模式的装饰模式;行为型设计模式的观察者模式。

一、创建型设计模式

1.单例模式

类的实例化只能有一个,并提供一个访问它的全局访问点。如 文件系统、打印程序等。
通常都是通过全局或者静态变量来实现,其构造函数、拷贝构造函数和赋值构造函数都必须设为private私有的,不允许类外直接调用构造函数,而是类提供一个静态函数来内部调用构造函数来创建实例。

根据创建的时间点又分为懒汉模式和饿汉模式:
①懒汉模式:用的时候才实例化,其存在着不安全隐患,如多个线程同时创建,①必须把这个实例化过程视为临界区的资源,需要加锁②或者使用静态变量来避免重复定义,否则会有问题。
②饿汉模式:在初始化的时候在立马创建,不管后续用不用,所以饿汉模式是安全的,

2.工厂模式

工厂模式用来创建不同但是相关类型的对象,不同情况使用不同功能,工厂模式又分为简单工厂、工厂方法和抽象工厂。
①简单工厂:其工厂还没有被抽象为类,还只是一个函数接口,通过形式参数和内部结构来创建不同的对象。
理解图:
在这里插入图片描述
工厂还是一个函数,通过传入的参数,决定创建哪个类型的对象。 比较简单,但是要添加新的产品的时候,需要修改工厂的代码。

②工厂方法:把工厂也抽象为类,使工厂本身也多态,而不是一个接口(抽象出工厂类)。不满足开闭原则。

理解图:
在这里插入图片描述

工厂也抽象为了类,要添加新产品,只需要添加相应的继承类即可,不需要对函数进行修改了,满足开闭原则。

③抽象工厂
与工厂方法类似,工厂方法是抽象工厂的一个特例(只有一个产品),多个产品时,使用抽象工厂。

理解图:
在这里插入图片描述
相比于工厂方法,工厂抽象还要复杂一点,工厂方法对应于单个产品,工厂抽象对应于多个产品。

二、结构型设计模式

1.装饰模式

可以动态的添加新功能,比派生类更灵活。

在这里插入图片描述
因为他们都具有同样的基类(自动步枪),所以可以直接调用初始化。
是这么使用的。

	自动步枪* myqiang = new 自动步枪();
	AK47* myAK = new AK47(myqiang);
	印花* myAK_yinhua = new 印花(myAK);
	扩容弹夹* myAK_yinhua_kuorongdanjia = new 扩容弹夹(myAK_yinhua);
	myqiang = myAK_yinhua_kuorongdanjia;
	myqiang->fire();

精髓就是装饰的具体类调用Decorator装饰的抽象类的构造函数。
装饰的抽象类必须有一个指针变量指向ConcreteComponent具体的被修饰对象。
它把每个要装饰的功能放在单独的类中,并让这个类包装它所要装饰的对象。用户适当调用就调用即可。

三、行为型设计模式

1.观察者模式

定义一种一(被观察者)对多(观察者)的关系,一旦被观察者变化,会通知所有的观察者都做出相应的行动。(发布\订阅模式)

理解图:
在这里插入图片描述

被观察者类内部需要有一个数据结构可以存储所有的观察者(观察者的指针)、并且被观察者类内部至少需要有几个函数:增加观察者、删除观察者和通知观察者。
观察者类内部有针对不同通知的操作即可。

后面慢慢学吧。。路漫漫其修远兮!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值