专业编程基础技术教程

网站首页 > 基础教程 正文

设计模式——工厂方法模式

ccvgpt 2024-08-16 15:05:27 基础教程 7 ℃

1. 工厂方法模式定义与目的

工厂方法模式是一种创建型设计模式,它提供了一个接口,用于创建相关或依赖对象的家族,而无需指定具体的类。这种模式让子类决定实例化哪一个产品类,使得代码更具灵活性和扩展性,也符合“开放封闭原则”。

2. 工厂方法模式要素

  1. 抽象工厂类(Abstract Factory):声明一个创建产品的接口,但不涉及具体的产品类。
  2. 具体工厂类(Concrete Factory):继承抽象工厂类,实现创建具体产品的接口。
  3. 抽象产品类(Abstract Product):定义产品的接口,所有具体产品类都必须实现这个接口。
  4. 具体产品类(Concrete Product):继承抽象产品类,实现具体的产品功能。

3. C++ 中工厂方法模式的实现范例

3.1 定义抽象工厂接口

class AbstractFactory {
public:
    virtual ~AbstractFactory() {}
    virtual Animal* createAnimal() const = 0;
};

class Animal {
public:
    virtual ~Animal() {}
    virtual void makeSound() const = 0;
};

3.2 定义具体工厂类

class DogFactory : public AbstractFactory {
public:
    Animal* createAnimal() const override {
        return new Dog();
    }
};

class CatFactory : public AbstractFactory {
public:
    Animal* createAnimal() const override {
        return new Cat();
    }
};

class Dog : public Animal {
public:
    void makeSound() const override {
        std::cout << "Woof!" << std::endl;
    }
};

class Cat : public Animal {
public:
    void makeSound() const override {
        std::cout << "Meow!" << std::endl;
    }
};

3.3 使用工厂方法创建产品

int main() {
    AbstractFactory* dogFactory = new DogFactory();
    Animal* myDog = dogFactory->createAnimal();
    myDog->makeSound();

    AbstractFactory* catFactory = new CatFactory();
    Animal* myCat = catFactory->createAnimal();
    myCat->makeSound();

    delete myDog;
    delete myCat;
    delete dogFactory;
    delete catFactory;

    return 0;
}

4. 注意事项

  1. 面向接口编程:工厂方法模式强调了针对抽象编程的重要性,客户代码只需关心抽象工厂接口,无需知道具体产品类型。
  2. 扩展性:当需要新增产品类型时,只需要增加新的具体产品类和相应的具体工厂类即可,原有代码无需修改,体现了“开闭原则”。
  3. 资源管理:在实际应用中,建议使用智能指针(如C++11中的std::unique_ptr)来自动管理对象的生命周期,避免手动释放资源带来的错误风险。

通过工厂方法模式,可以根据不同的需求动态创建不同类型的产品对象,使得程序更加灵活且易于维护。

设计模式——工厂方法模式

最近发表
标签列表