C++设计模式--工厂模式

1.设计模式

C++设计模式共有以下几种:
1. **
创建型模式**:关注于对象的创建过程。包括工厂方法模式、抽象工厂模式、单例模式、建造者模式和原型模式。
2. **
结构型模式**:关注类和对象的组合。包括适配器模式、装饰器模式、代理模式、外观模式、桥接模式、组合模式和享元模式。
3. **
行为型模式**:关注对象之间的通信。包括策略模式、模板方法模式、观察者模式、迭代器模式、责任链模式、命令模式、备忘录模式、状态模式、访问者模式、中介者模式和解释器模式。

此外,还有并发模式和线程池模式等其他类型的模式。每种设计模式都有其特定的使用场景和解决的问题。了解这些设计模式有助于编写更加灵活、可维护且可重用的代码。

2.设计模式作用

它们不仅是最佳实践的体现,而且是众多开发者长时间试验和总结的成果。以下是使用设计模式的一些具体作用:

  1. 提高代码重用性:通过遵循设计模式,可以确保相同的功能不需要多次编写,这样可以节省时间并减少错误的可能性。
  2. 增强可读性:设计模式提供了一种编程规范,使得代码更易于其他程序员阅读和理解,这对于团队合作尤为重要。
  3. 提升可扩展性:当需要向现有系统添加新功能时,良好的设计模式可以使这一过程更加方便,同时也保证了原有功能的稳定性。
  4. 保证可靠性:设计模式的应用有助于降低新增功能对原有系统的影响,从而提高软件的整体可靠性。
  5. 促进高内聚低耦合:设计模式鼓励创建高内聚且低耦合的代码,这有助于构建更加健壮和灵活的系统。
  6. 遵循设计原则:设计模式基于七大原则,如单一职责原则、开闭原则等,这些原则是设计模式设计的基础,也是编程时应遵守的规则。
  7. 实现工程化:设计模式使代码编制更加工程化,它们是软件工程的基石,对于构建稳定的大型系统至关重要。

3.工厂模式

1.设计思想

工厂模式是一种创建型设计模式,它的核心思想是提供一个创建对象的接口,但由子类决定要实例化的类是哪一个。这样可以将对象的创建过程封装起来,使得代码更加灵活和可维护。

使用工厂模式可以带来以下好处:

1. **封装性**:客户端代码不需要知道如何创建对象,只需要知道如何从工厂请求它即可。这样,如果创建对象的逻辑发生变化,只需要修改工厂类,而不需要修改依赖于工厂的客户端代码。
2. **
扩展性**:当需要添加新的产品类时,只需扩展具体的工厂类和产品类,而不会影响到其他代码,符合软件设计的开闭原则。
3. **灵活性**:可以通过改变工厂类的实现来改变所创建的产品类型,而无需修改调用它的代码。
4. **依赖倒置原则**:高层模块不依赖于底层模块,它们都依赖于抽象。这意味着我们的代码更加模块化,各个模块之间的耦合度降低,提高了代码的可维护性和稳定性。
5. **避免直接实例化对象**:通过工厂方法创建对象而不是直接调用构造函数,可以更灵活地控制对象的创建过程,例如添加缓存机制或者在创建对象前后执行一些操作。

总的来说,在C++开发中使用工厂模式可以使代码更加灵活、可维护且易于扩展,同时遵循了SOLID设计原则中的开闭原则和依赖倒置原则。

2.示例

#include <iostream>
#include <memory>

// 抽象产品类
class Product {
public:
    virtual ~Product() {}
    virtual void Show() = 0;
};

// 具体产品类A
class ConcreteProductA : public Product {
public:
    void Show() override {
        std::cout << "我是产品A" << std::endl;
    }
};

// 具体产品类B
class ConcreteProductB : public Product {
public:
    void Show() override {
        std::cout << "我是产品B" << std::endl;
    }
};

// 抽象工厂类
class Factory {
public:
    virtual ~Factory() {}
    virtual std::unique_ptr<Product> CreateProduct() = 0;
};

// 具体工厂类A
class ConcreteFactoryA : public Factory {
public:
    std::unique_ptr<Product> CreateProduct() override {
        return std::make_unique<ConcreteProductA>();
    }
};

// 具体工厂类B
class ConcreteFactoryB : public Factory {
public:
    std::unique_ptr<Product> CreateProduct() override {
        return std::make_unique<ConcreteProductB>();
    }
};

int main() {
    // 使用具体工厂A创建产品A
    std::unique_ptr<Factory> factoryA = std::make_unique<ConcreteFactoryA>();
    std::unique_ptr<Product> productA = factoryA->CreateProduct();
    productA->Show();

    // 使用具体工厂B创建产品B
    std::unique_ptr<Factory> factoryB = std::make_unique<ConcreteFactoryB>();
    std::unique_ptr<Product> productB = factoryB->CreateProduct();
    productB->Show();
	system("pause");
    return 0;
}
  1. Product是一个抽象产品类,定义了一个纯虚函数Show
  2. ConcreteProductAConcreteProductB是具体的产品类,它们都继承自Product并实现了Show方法。
  3. Factory是一个抽象工厂类,定义了一个纯虚函数CreateProduct
  4. ConcreteFactoryAConcreteFactoryB是具体的工厂类,它们都继承自Factory并实现了CreateProduct方法。
  5. main函数中,我们首先使用具体工厂A创建了一个产品A,然后使用具体工厂B创建了一个产品B。
  • 11
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
设计模式是在软件开发中常用的一种编程思想,它提供了一种解决问题的方法论,可以帮助开发者更加灵活和高效地开发软件。基于qt4开源跨平台开发框架的PDF设计模式主要包括以下几个方面。 首先,观察者模式是一种常用的设计模式,它可以用于实现PDF文件的订阅和通知功能。通过该模式,用户可以选择关注自己感兴趣的PDF文件,并在文件更新时接收到通知。 其次,工厂模式是常用的创建型设计模式,它可以帮助开发者根据需要创建不同类型的PDF文件。例如,可以使用工厂模式创建基本的PDF文件、加密的PDF文件或者带有水印的PDF文件。 再次,装饰器模式是一种结构型设计模式,可以用于在不修改现有代码的情况下为PDF文件添加额外的功能。开发者可以通过装饰器模式为PDF文件添加页眉、页脚、书签等功能,同时保持原有的PDF文件结构和功能不受影响。 此外,策略模式也是常用的设计模式之一,在PDF开发中可以用于实现不同的压缩策略和加密策略。通过策略模式,开发者可以根据需求选择不同的策略来实现对PDF文件的处理和管理。 最后,单例模式是一种创建型设计模式,可以确保在整个应用程序中只有一个PDF文件实例。通过单例模式,可以在不同的模块中共享同一个PDF文件对象,避免资源浪费和数据冲突。 总而言之,设计模式在基于qt4开源跨平台开发框架的PDF开发中具有重要的作用。以上提到的几种设计模式可以帮助开发者更好地组织和管理PDF文件,提高开发效率和代码的可维护性。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值