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

版权声明:支持原创,转载请说明~ https://blog.csdn.net/luoyayun361/article/details/88632368

概述

工厂模式:封装对象的实现。它可能是所有设计模式中最有用的模式之一了。这里要说的是简单工厂模式,又称为静态方法工厂模式,属于创建性模式。其原理就是通过传入的参数来判断应该创建什么对象。

UML 类图

  • Factory :工厂类的核心,创建各种不同产品对象
  • IShape: 产品抽象基类,提供所有通用接口
  • Rectangle、Circle : 具体的产品实现

适用场景

  • 工厂类负责创建的对象比较少
  • 客户端只需要向工厂类传入参数进行创建,不需要关心内部实现

优缺点

优点:结构简单,可以快速创建工厂类结构,客户端只需要知道对应的参数即可, 不用关心工厂内部实现。

缺点:在产品类型较多时,可能造成工厂类逻辑复杂,新增加产品又要修改工厂逻辑,不利于扩展和维护。此外,工厂类集中了所有产品的创建逻辑,违反了高内聚责任分配原则,一旦无法正常工作,将会影响整个系统。

示例

说了这么多,接下来看看一个简单的示例:

product.h

#ifndef PRODUCT_H
#define PRODUCT_H
#include <iostream>

using namespace std;

class IShape
{
public:
    IShape();
    virtual ~IShape();

    virtual void draw() = 0;
};

class Rectangle : public IShape
{
public:
    Rectangle(){}
    ~Rectangle(){}
    void draw();
};

class Circle : public IShape
{
public:
    Circle(){}
    ~Circle(){}
    void draw();
};

class Triange : public IShape
{
public:
    Triange(){}
    ~Triange(){}
    void draw();
};

#endif // PRODUCT_H

product.cpp

#include "product.h"

IShape::IShape()
{
}

IShape::~IShape()
{
}

void Triange::draw(){
    cout << "draw Triange.." << endl;
}

void Circle::draw(){
    cout << "draw Circle.." << endl;
}

void Rectangle::draw(){
    cout << "draw Rectangle.." << endl;
}

factory.h

#ifndef FACTORY_H
#define FACTORY_H

#include <iostream>
#include "product.h"

using namespace std;

class Factory
{
public:
    enum ShapeType{
        RECTANGLE,
        CIRCLE,
        TRIANGE
    };
    Factory();
    IShape * drawShape(ShapeType type);

};

#endif // FACTORY_H

factory.cpp

#include "factory.h"

Factory::Factory()
{

}

IShape *Factory::drawShape(Factory::ShapeType type)
{
    IShape * shape = nullptr;
    switch (type) {
    case RECTANGLE:
        shape = new Rectangle();
        break;
    case CIRCLE:
        shape = new Circle();
        break;
    case TRIANGE:
        shape = new Triange();
        break;
    default:
        shape = nullptr;
        break;
    }
    return shape;
}

main.cpp

#include <iostream>

using namespace std;
#include "factory.h"

#define DELETE(x) {if(x){delete(x);(x) = NULL;}}

int main()
{
    Factory * pFactory = new Factory();
    IShape * pShape;
    pShape = pFactory->drawShape(Factory::RECTANGLE);
    pShape->draw();

    DELETE(pShape);

    pShape = pFactory->drawShape(Factory::CIRCLE);
    pShape->draw();

    DELETE(pShape);

    pShape = pFactory->drawShape(Factory::TRIANGE);
    pShape->draw();

    DELETE(pShape);


    return 0;
}

输出:

draw Rectangle..
draw Circle..
draw Triange..

上述代码在这里

猜你喜欢

转载自blog.csdn.net/luoyayun361/article/details/88632368