抽象工厂模式与单件模式C++混合实现

抽象工厂

当每个抽象产品都有多于一个的具体子类的时候,工厂角色怎么知道实例化哪一个子类呢?比如每个抽象产品角色都有两个具体产品。抽象工厂模式提供两个具体工厂角色,分别对应于这两个具体产品角色,每一个具体工厂角色只负责某一个产品角色的实例化。每一个具体工厂类只负责创建抽象产品的某一个具体子类的实例。


单件模式

Singleton就是确保一个类只有唯一的一个实例。Singleton主要用于对象的创建,这意味着,如果某个类采用了Singleton模式,则在这个类被创建后,它将有且仅有一个实例可供访问。很多时候我们都会需要Singleton模式,最常见的比如我们希望整个应用程序中只有一个连接数据库的Connection实例;又比如要求一个应用程序中只存在某个用户数据结构的唯一实例。我们都可以通过应用Singleton模式达到目的。

设计模式——单例Singleton模式


实例

该公司数据库拥有三张表,分别是用户表、部门表和项目表。每张表的操作都支持查询和添加功能。数据库支持MySQL和SQL Server两种。结合抽象工厂模式和单件模式给出该系统的模拟代码。

在抽象工厂模式中,一个应用里一般每个产品只需要一个具体工厂的实例,因此,工厂通常最好用单件模式实现。实验要求结合抽象工厂模式和单件模式,模拟公司数据库创建过程。

UML图

C++代码

效果

注意第二行是再次生成一个MySQL的工厂,但是由于只能有一个,因此不能再次创建。


总结

  • 注意使用单件模式写MySQL和SQL Server的具体工厂时,只能对自身单件,即生成一个MySQL工厂时,不能再次生成第二个MySQL工厂,但是可以生成SQL Server工厂。
  • 当使用单件模式时,具体工厂的构造函数需要放在private中,这样客户端不能随意创建多个工厂。在public中需要增加getInstance函数用来判断是否生成了工厂,如果存在,则不能创建第二个,注意这是static类型。
  • 具体工厂的指针需要在类外部全局部分进行初始化为NULL。

留下评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注