大话设计模式C++版本-01-简单工厂模式

简介: 大话设计模式C++版本-01-简单工厂模式

概念

简单工厂模式:根据不同的条件,使用一个工厂类来创建不同类的对象的一种设计模式,用来解决创建对象的问题。

应用场景

  1. 有几个不同的类,且这几个类有共同的父类;
  2. 在不同的条件下用这几个类创造不同的对象;

一般步骤

写一个抽象类作为不同条件的几个类的父类,例如写一个“操作符类”作为“加法类”和“减法类”的父类;

// 伪代码
class Operator
{
  ...
  virtual double GetResult() = 0;
}

写具体的子类,并且继承前面的抽象类

// 伪代码
class OperatorAdd : public Operator
{
  double GetResult(){ ... }
}
class OperatorSub : public Operator
{
  double GetResult(){ ... }
}
  ```

写一个工厂类,根据不同的条件创建对象

// 伪代码
class SimpleFactory
{
  ...
  Operator *creatOperation(char cOpe)
  {
    Operator *ope = NULL;
    switch(cOpe)
    {
      case '+':
        ope = new OperatorAdd();
        break;
      case '-':
        ope = new OperatorSub();
        break;
    }
    return ope;
  }
}

具体实例

// SimpleFactory.cpp
#include <cstdio>
class Operator // 抽象类-计算器类
{
public:
  virtual void GetResult()=0;
  void SetNumA(double numA)
  {
    a = numA;
  }
  void SetNumB(double numB)
  {
    b = numB;
  }
protected:
  double a,b;
};
class OperatorAdd : public Operator //加法器类,继承计算器类
{
public:
  void GetResult()
  {
    printf("a+b=%lf\n",a+b);
  }
};
class OperatorSub : public Operator // 减法器类,继承计算器类
{
public:
  void GetResult()
  {
    printf("a-b=%lf\n",a-b);
  }
};
class SimpleFactory// 工厂类,根据不同符号,创建不同的计算器对象
{
public:
  static Operator * creatOperator(char cOpe)
  {
    Operator *ope = NULL;
    switch (cOpe)
    {
      case '+':
        ope = new OperatorAdd();
        break;
      case '-':
        ope = new OperatorSub();
        break;
      default:
        printf("error ope = %c\n",cOpe);
        break;
    }
  }
};
int main()
{
  Operator *ope = NULL;
  ope = SimpleFactory::creatOperator('+');// 创建加法器对象
  ope->SetNumA(1.1);
  ope->SetNumB(2.2);
  ope->GetResult();
  delete ope;
  ope = SimpleFactory::creatOperator('-');// 创建减法器对象
  ope->SetNumA(3.3);
  ope->SetNumB(2.2);
  ope->GetResult();
  delete ope;
  return 0;
}

参考资料

程杰老师的《大话设计模式

目录
相关文章
|
1月前
|
设计模式 SQL 算法
设计模式了解哪些,模版模式
设计模式了解哪些,模版模式
22 0
|
1月前
|
设计模式 开发者
探讨常见设计模式 - 工厂方法模式的最佳实践和潜在的实施问题
【4月更文挑战第7天】工厂方法模式是创建型设计模式,提供了一种在不指定具体类情况下创建对象的方式。它定义创建对象的接口,允许子类决定实例化哪个类,从而解耦对象的创建和使用。最佳实践包括明确接口、封装创建逻辑、提供扩展点和避免过度使用。然而,过度工程、违反开闭原则、性能影响和依赖管理是可能的问题。通过权衡利弊并遵循最佳实践,工厂方法模式能在适当场景下提升代码灵活性和可扩展性。
|
1月前
|
设计模式 Java 数据库
小谈设计模式(2)—简单工厂模式
小谈设计模式(2)—简单工厂模式
|
1月前
|
设计模式 Java PHP
php设计模式--简单工厂模式(一)
php设计模式--简单工厂模式(一)
15 0
|
1天前
|
设计模式 JavaScript 前端开发
js设计模式-观察者模式与发布/订阅模式
观察者模式和发布/订阅模式是JavaScript中的两种设计模式,用于处理对象间的通信和事件处理。观察者模式中,一个主题对象状态改变会通知所有观察者。实现包括定义主题和观察者对象,以及在主题中添加、删除和通知观察者的功能。发布/订阅模式则引入事件管理器,允许发布者发布事件,订阅者通过订阅接收通知。
|
12天前
|
设计模式 前端开发 Java
19:Web开发模式与MVC设计模式-Java Web
19:Web开发模式与MVC设计模式-Java Web
22 4
|
17天前
|
设计模式 消息中间件 Java
Java 设计模式:探索发布-订阅模式的原理与应用
【4月更文挑战第27天】发布-订阅模式是一种消息传递范式,被广泛用于构建松散耦合的系统。在 Java 中,这种模式允许多个对象监听和响应感兴趣的事件。
37 2
|
20天前
|
设计模式 存储 JavaScript
[设计模式Java实现附plantuml源码~创建型] 多态工厂的实现——工厂方法模式
[设计模式Java实现附plantuml源码~创建型] 多态工厂的实现——工厂方法模式
|
20天前
|
设计模式 Java Go
[设计模式Java实现附plantuml源码~创建型] 集中式工厂的实现~简单工厂模式
[设计模式Java实现附plantuml源码~创建型] 集中式工厂的实现~简单工厂模式
|
20天前
|
设计模式 存储 Java
C++从入门到精通:3.5设计模式——提升代码可维护性与可扩展性的关键
C++从入门到精通:3.5设计模式——提升代码可维护性与可扩展性的关键