设计模式(三)——工厂方法模式

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

抽象工厂(Abstract Factory)角色:工厂方法模式的核心,任何工厂类都必须实现这个接口。
工厂(Concrete Factory)角色:具体工厂类是抽象工厂的一个实现,负责实例化产品对象。
抽象产品(Abstract Product)角色:工厂方法模式所创建的所有对象的父类,它负责描述所有实例所共有的公共接口。
具体产品(Concrete Product)角色:工厂方法模式所创建的具体实例对象。

 

优点
1. 不需要记住具体类名,甚至连具体参数都不用记忆。
2. 实现了对象创建和使用的分离。
3. 系统的可扩展性也就变得非常好,无需修改接口和原类。
缺点
1. 增加系统中类的个数,复杂度和理解度增加。
2. 增加了系统的抽象性和理解难度。

 

适用场景
1.客户端不知道它所需要的对象的类。
2.抽象工厂类通过其子类来指定创建哪个对象

#include <iostream>
using namespace std;

class Fruit
{
public:
    virtual void get_name() = 0;
};

class Apple :public Fruit
{
public:
    virtual void get_name()
    {
        cout << "我是苹果" << endl;
    }
};

class Banana :public Fruit
{
public:
    virtual void get_name()
    {
        cout << "我是香蕉" << endl;
    }
};

// 抽象工厂
class AbstractFactory
{
public:
    virtual Fruit* create_fruit() = 0;
};

// apple工厂
class AppleFactory :public AbstractFactory
{
public:
    virtual Fruit* create_fruit()
    {
        return new Apple;
    }
};

// Banana工厂
class BananaFactory :public AbstractFactory
{
public:
    virtual Fruit* create_fruit()
    {
        return new Banana;
    }
};

int main()
{
    // 1. 给我来一个香蕉工厂
    AbstractFactory* factory = new BananaFactory;
    // 2. 给我来一个水果
    Fruit* fruit = factory->create_fruit();// 只能够产生香蕉 // 多态
    fruit->get_name();

    delete factory;
    delete fruit;

    system("pause");
    return 0;
}

 

posted @ 2019-02-08 22:06  狂奔~  阅读(204)  评论(0编辑  收藏  举报