设计模式-工厂方法模式

创建型-工厂方法模式

//工厂模式-符合开闭原则
//缺:1.类的个数成倍数增加,导致类越来越多,增加维护成本
//2.需要自己判断创建类型(增加了系统的抽象性和理解难度)

//优:1.不需要记住具体类名,甚至连具体参数都不用记住
//2.实现了对象创建和使用分离
//3系统的可扩展性也就变得非常好,无需修改接口和原类

//简单工厂模式 + “开闭原则” = 工厂方法模式

//适用场景
//1.工厂类负责创建的对象比较少,由于创建的对象较少,不会造成工厂方法中的业务逻辑太过复杂
//2.客户端只知道传入工厂类的参数,对于如何创建对象并不关心
//1.客户端不知道它所需要的对象的类
//2.抽象工厂类通过其子类来指定创建哪个对象

#include <iostream>
using namespace std;

//抽象水果类
class AbstractFruit{
public:
    virtual void ShowName() = 0;
};

//苹果
class Apple : public AbstractFruit{
public:
    virtual void ShowName(){
        cout << "我是苹果!" << endl;
    }
};

//香蕉
class Banana : public AbstractFruit{
public:
    virtual void ShowName(){
        cout << "我是香蕉!" << endl;
    }
};

//鸭梨
class Pear : public AbstractFruit{
public:
    virtual void ShowName(){
        cout << "我是鸭梨!" << endl;
    }
};

//抽象工厂
class AbstractFruitFactory{
public:
    virtual AbstractFruit* CreateFruit() = 0;
};

//苹果工厂
class AppleFactory : public AbstractFruitFactory{
public:
    virtual AbstractFruit* CreateFruit(){
        return new Apple;
    }
};

//香蕉工厂
class BananaFactory : public AbstractFruitFactory{
public:
    virtual AbstractFruit* CreateFruit(){
        return new Banana;
    }
};

//鸭梨工厂
class PearFactory : public AbstractFruitFactory{
public:
    virtual AbstractFruit* CreateFruit(){
        return new Pear;
    }
};

void test(){
    AbstractFruitFactory* factory = NULL;
    AbstractFruit* fruit = NULL;

    //创建一个苹果工厂
    factory = new AppleFactory;
    fruit = factory->CreateFruit();
    fruit->ShowName();
    delete fruit;
    delete factory;

    //创建一个香蕉工厂
    factory = new BananaFactory;
    fruit = factory->CreateFruit();
    fruit->ShowName();
    delete fruit;
    delete factory;

    //创建一个鸭梨工厂
    factory = new PearFactory;
    fruit = factory->CreateFruit();
    fruit->ShowName();
    delete fruit;
    delete factory;
    fruit = NULL;
	factory = NULL;
}

int main()
{
    test();

    system("pause");
    return 0;
}

posted @ 2023-10-14 19:07  洋綮  阅读(18)  评论(0)    收藏  举报