C++设计模式

释放双眼,带上耳机,听听看~!

1.单例模式:只能生成一个对象的类
首先需要将生成对象的接口析构函数和拷贝构造函数的接口屏蔽起来,
其次在类中提供一个接口来生成唯一的对象
为了防止临时对象的生成需要将该接口的返回值设置为类对象的引用或指针
而且这个接口应该是静态的,因为如果不是该接口需要依赖函数对象调用而函数对象又要依赖该接口生成
最后 静态接口只能访问静态成员变量,所以还需要定义一个静态对象的指针,并在类外初始化
但是一般写出来的这种在多线程条件下并不能算安全
可以通过加解锁的方式来处理
或者由于进程启动之后线程才会启动
所以我们可以通过在主函数之前将函数对象生成好之后就不用担心线程是否安全(定义一个静态的对象)

2、.工厂模式:
1.简单工厂模式
优缺点:在简单工厂模式中,工厂类是整个模式的关键所在。它包含了必要的判断逻辑,能够根据外界给定的条件去判断应该创建哪个具体类的实例。用户在使用时可以直接根据工厂类去创建所需的实例,而无需关系这些对象是如何组织并创建的,从这一点上来说,这有利于整个软件体系结构的优化。但是,简单工厂模式的缺点也正体现在工厂类上,由于工厂类中集中了所有实例的创建逻辑,当我们增加了一个新的具体类时,需要同时修改工厂类(多加一个if),这违反了“开闭原则”。
简单工厂模式属于类的创建型模式,又叫静态工厂方法模式。通过专门定义一个工厂类来负责创建其他类的实例,被创建的实例通常都具有共同的父类。
简单工厂模式包含三种角色:
1.工厂角色(Creator)
这是简单工厂模式的核心,它用来负责实现创建所有实例的内部逻辑。工厂类可以被外界直接调用,创建所需的产品对象。
2.抽象角色(Product)
这是简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。该类可以是接口,也可以是抽象类。
3.具体产品角色(Concrete Product)
简单工厂模式所创建的具体的实例对象。

C++设计模式

以上面的UML为例,表示的是一个用简单工厂方法模式实现的计算器程序。
其中Operator是一个抽象类,其中包含属性numberA及numberB,还有一个方法getResult()用于返回计算的结果,它的角色是抽象角色(Product)。下面的AddOperator,SubOperator,MulOperator,DivOperator是Operator的子类,分别代表加减乘除四种运算,他们的角色是具体产品角色(Concrete Product)。OperatorFactory是工厂类,其中的createOperator()方法用于创建计算器对象。
2、工厂方法模式
优缺点:与简单工厂模式相比,工厂方法模式避免了因为传入字符串错误导致无法正常创建对象的问题,但需要添加新的具体类时,仍然需要修改工厂类,这仍然违背“开闭原则”。
工厂方法模式是对普通工厂方法模式的改进,在普通工厂方法模式中,如果传递的字符串出错,则不能正确创建对象,而工厂方法模式是提供多个工厂方法,分别创建对象。
3、抽象工厂模式
工厂方法模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了开闭原则,所以,从设计角度考虑,有一定的问题,如何解决?就用到抽象工厂模式。抽象工厂模式就是将对象工厂的创建抽象到一个接口中。抽象工厂类不在负责产品的创建,仅仅负责定义具体工厂子类必须实现的接口,这样进一步抽象化的好处是使得可以再不修改具体工厂角色的情况下引进新的产品。这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码,符合开闭原则。
抽象工厂模式中包含的角色及职责:
1.抽象工厂角色(Creator)
这是抽象工厂模式的核心,任何工厂类必须实现这个接口。
2.具体工厂角色(Concrete Creator)
它是抽象工厂的一个实现,负责实例化产品对象。
3.抽象角色(Product)
抽象工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。
3.具体产品角色(Concrete Product)
抽象工厂模式所创建的具体的实例对象。
下面结合UML图理解一下:
C++设计模式

给TA打赏
共{{data.count}}人
人已打赏
安全技术

详解Node.js API系列 Crypto加密模块(2) Hmac

2021-12-21 16:36:11

安全技术

从零搭建自己的SpringBoot后台框架(二十三)

2022-1-12 12:36:11

个人中心
购物车
优惠劵
今日签到
有新私信 私信列表
搜索