文章目录
一、什么是设计模式
设计模式:在软件研发过程中,经过实战验证,用于解决在特定环境下、重复出现的,特定问题的解决方案,基于面向对象的设计原则:主要是对接口编程
而不是对实现编程、优先使用对象组合而不是继承
二、设计模式类型
23 种设计模式可分为三类:创建型模式、结构型模式、行为模式。
简单工厂模式、单例模式、抽象工厂模式、原型模式、建造者模式(5 种)。
代理模式、外观模式、享元模式、组合模式、装饰器模式、适配器模式、桥接模式(7 种)。
访问者模式、策略模式、模板模式、状态模式、备忘录模式、观察者模式、中介者模式、迭代器模式、解释器模式、责任链模式、命令模式(11 种)
简单工厂模式及应用场景
简单工厂模式主要解决接口选择问题。
Factory(工厂)的核心部分,负责实现创建所有产品的内部逻辑,工厂类可以被外界直接调用,创建所需对象即可
。
定义抽象产品类和具体产品类
首先,定义一个抽象产品类
和几个具体产品类
。这些类将实现一个共同的接口。
cpp
// 抽象产品类
class Product {
public:
virtual void use() = 0; // 纯虚函数
virtual ~Product() {} // 虚析构函数,确保派生类对象能正确析构
};
// 具体产品类A
class ConcreteProductA : public Product {
public:
void use() override {
std::cout << "Result of the product A" << std::endl;
}
};
// 具体产品类B
class ConcreteProductB : public Product {
public:
void use() override {
std::cout << "Result of the product B" << std::endl;
}
};
实现工厂类
接下来,实现一个工厂类,它根据输入参数决定创建哪种产品对象。
cpp
// 工厂类
class SimpleFactory {
public:
static Product* createProduct(const std::string& type) {
if (type == "A") {
return new ConcreteProductA();
} else if (type == "B") {
return new ConcreteProductB();
}
return nullptr;
}
};
客户端代码
最后,编写客户端代码,使用工厂类创建产品对象。
cpp
#include <iostream>
#include <string>
int main() {
std::string type = "A"; // 假设客户端需要创建产品A
Product* product = SimpleFactory::createProduct(type);
if (product != nullptr) {
product->use();
delete product; // 记得释放内存
}
type = "B"; // 现在客户端需要创建产品B
product = SimpleFactory::createProduct(type);
if (product != nullptr) {
product->use();
delete product; // 记得释放内存
}
return 0;
}
注意事项
扩展性:如果产品类非常多,工厂类可能会变得复杂。在这种情况下,可以考虑使用工厂方法模式或抽象工厂模式。