【设计模式】创建型模式-Factory模式

功能

  1. 定义创建对象的接口,封装了对象的创建
  2. 使得具体化类的工作延迟到了子类中

解决

  • 主要解决:解决接口选择问题
  • 何时使用:明确地计划不同条件下创建不同实例时
  • 关键代码:创建过程在其子类执行

优缺点

  • 优点:
    • 创建对象时只需知道创建名称即可
    • 扩展性高
    • 封装性好
  • 缺点:
    • 增加复杂度
    • 增加了系统具体类的依赖

应用场景

  • 应用实例:
    • 你要做一个披萨,我只需要知道披萨的名字,具体怎么做,交给披萨工厂(自己创建)创建即可。
    • 你需要一辆车,你只需要知道车的名字,直接从工厂里去获取,至于汽车里面内部怎么实现,则不需要关心
  • 使用场景:
    • 日志记录器
    • 数据库访问
    • 设计一个链接服务器的框架,需要三个协议(“POP3”、“IMAP”、“HTTP”),可以把这三个作为产品类,共同实现一个接口。
  • 注意事项:复杂对象适合使用工厂模式,而简单对象使用工厂模式反而会增加复杂度

简单示例代码部分

Factory.hpp


#ifndef _FACTORY_H_
#define _FACTORY_H_
#include <iostream>
class Product{
public:
    virtual ~Product(){};
    Product(){}
};
class ConcreteProduct:public Product{
public:
    ConcreteProduct(){
        std::cout<<"ConcreteProduct...."<<std::endl;
    }
};
class Factory{
public:
    virtual ~Factory(){};
    virtual Product* CreateProduct()=0;
    Factory(){}
};
class ConcreteFactory:public Factory{
public:
    ConcreteFactory(){
        std::cout<<"ConcreteFactory...."<<std::endl;
    }
    Product* CreateProduct(){
        return new ConcreteProduct();
    }
};
#endif

main.cpp

#include "Factory.hpp"
int main(void){
    Factory* fac = new ConcreteFactory();
    Product* p = fac->CreateProduct();
    return 0;
}

发布了64 篇原创文章 · 获赞 3 · 访问量 6225

猜你喜欢

转载自blog.csdn.net/qazsatan/article/details/103585300