[C++][设计模式][抽象工厂]详细讲解


1.动机

  • 在软件系统中,经常面临着“一系列相互依赖的对象”的创建工作;同时,由于需求的变化,往往存在更多系列对象的创建工作
  • 如何应对这种变化?如何绕过常规的对象创建方法(new),提供一 种“封装机制”来避免客户程序和这种“多系列具体对象创建工作”的紧耦合?

2.模式定义

  • 定义:提供一个接口,让该接口负责创建一系列“相关或者相互依赖的对象”,无需指定它们具体的类
    • 个人感觉抽象工厂家族工厂可能更形象:P
  • 结构
    请添加图片描述

3.要点总结

  • 如果没有应对“多系列对象构建”的需求变化,则没有必要使用Abstract Factory模式,这时候使用简单的工厂完全可以
  • 系列对象”指的是在某一特定系列下的对象之间有相互依赖、 或作用的关系。不同系列的对象之间不能相互依赖
  • Abstract Factory模式主要在于应对“新系列”的需求变动
    • 缺点:难以应对“新对象”的需求变动

4.代码感受

1.代码一

class EmployeeDAO
{
public:
    vector<EmployeeDO> GetEmployees()
    {
        SqlConnection* connection = new SqlConnection();
        connection->ConnectionString = "...";

        SqlCommand* command = new SqlCommand();
        command->CommandText = "...";
        command->SetConnection(connection);

        SqlDataReader* reader = command->ExecuteReader();
        while (reader->Read())
        {}
    }
};

2.代码二 – 工厂方法

// 数据库访问有关的基类
class IDBConnection
{};
class IDBConnectionFactory
{
public:
    virtual IDBConnection* CreateDBConnection() = 0;
};

class IDBCommand
{};
class IDBCommandFactory
{
public:
    virtual IDBCommand* CreateDBCommand() = 0;
};

class IDataReader
{};
class IDataReaderFactory
{
public:
    virtual IDataReader* CreateDataReader() = 0;
};

//支持SQL Server
class SqlConnection: public IDBConnection
{};
class SqlConnectionFactory:public IDBConnectionFactory
{};

class SqlCommand: public IDBCommand
{};
class SqlCommandFactory:public IDBCommandFactory
{};

class SqlDataReader: public IDataReader
{};
class SqlDataReaderFactory:public IDataReaderFactory
{};

//支持Oracle
class OracleConnection: public IDBConnection
{};
class OracleCommand: public IDBCommand
{};
class OracleDataReader: public IDataReader
{};

class EmployeeDAO
{
    IDBConnectionFactory* dbConnectionFactory;
    IDBCommandFactory* dbCommandFactory;
    IDataReaderFactory* dataReaderFactory;
public:
    vector<EmployeeDO> GetEmployees()
    {
        IDBConnection* connection =
            dbConnectionFactory->CreateDBConnection();
        connection->ConnectionString("...");

        IDBCommand* command =
            dbCommandFactory->CreateDBCommand();
        command->CommandText("...");
        command->SetConnection(connection); // 关联性

        IDBDataReader* reader = command->ExecuteReader(); // 关联性
        while (reader->Read())
        {}
    }
};

3.代码三 – 抽象工厂

//数据库访问有关的基类
class IDBConnection
{};
class IDBCommand
{};
class IDataReader
{};

class IDBFactory
{
public:
    virtual IDBConnection* CreateDBConnection() = 0;
    virtual IDBCommand* CreateDBCommand() = 0;
    virtual IDataReader* CreateDataReader() = 0;
};

//支持SQL Server
class SqlConnection: public IDBConnection
{};
class SqlCommand: public IDBCommand
{};
class SqlDataReader: public IDataReader
{};

class SqlDBFactory:public IDBFactory
{
public:
    virtual IDBConnection* CreateDBConnection()
    {}
    virtual IDBCommand* CreateDBCommand()
    {}
    virtual IDataReader* CreateDataReader()
    {}
 
};

//支持Oracle
class OracleConnection: public IDBConnection
{};
class OracleCommand: public IDBCommand
{};
class OracleDataReader: public IDataReader
{};

class EmployeeDAO
{
    IDBFactory* dbFactory;
public:
    vector<EmployeeDO> GetEmployees()
    {
        IDBConnection* connection =
            dbFactory->CreateDBConnection();
        connection->ConnectionString("...");

        IDBCommand* command =
            dbFactory->CreateDBCommand();
        command->CommandText("...");
        command->SetConnection(connection);

        IDBDataReader* reader = command->ExecuteReader();
        while (reader->Read())
        {}
    }
};
  • 27
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 11
    评论
设计模式(Design Patterns)是解决软件设计中常见问题的一种经过验证的解决方案。它们是经过多年实践和总结得出的一些最佳实践和经验,可以帮助我们更加有效地设计出高质量、可重用的软件。 C++中常见的设计模式可以分为三类:创建型模式、结构型模式和行为型模式。 1. 创建型模式 创建型模式用于处理对象的创建,分离出对象的创建过程,使系统更加灵活。常见的创建型模式有: - 工厂方法模式(Factory Method Pattern) - 抽象工厂模式(Abstract Factory Pattern) - 单例模式(Singleton Pattern) - 原型模式(Prototype Pattern) - 建造者模式(Builder Pattern) 2. 结构型模式 结构型模式用于定义系统中不同对象之间的关系,以便更好地组织代码和逻辑。常见的结构型模式有: - 适配器模式(Adapter Pattern) - 桥接模式(Bridge Pattern) - 组合模式(Composite Pattern) - 装饰器模式(Decorator Pattern) - 外观模式(Facade Pattern) - 享元模式(Flyweight Pattern) - 代理模式(Proxy Pattern) 3. 行为型模式 行为型模式用于定义对象之间的交互方式,以便更好地组织代码和逻辑。常见的行为型模式有: - 责任链模式(Chain of Responsibility Pattern) - 命令模式(Command Pattern) - 解释器模式(Interpreter Pattern) - 迭代器模式(Iterator Pattern) - 中介者模式(Mediator Pattern) - 备忘录模式(Memento Pattern) - 观察者模式(Observer Pattern) - 状态模式(State Pattern) - 策略模式(Strategy Pattern) - 模板方法模式(Template Method Pattern) - 访问者模式(Visitor Pattern) 以上是C++中常见的设计模式,它们可以帮助我们更好地设计出高质量、可重用的软件。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 11
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

DieSnowK

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值