仪陇家园分类信息网、仪陇生活网、仪陇家园网

搜索

c++实现简单工厂完整源代码

[复制链接]
seo 发表于 2022-5-31 12:48:22 | 显示全部楼层 |阅读模式
c++实现简单工厂完整源代码​​SimpleFactory.hpp​​​​main.cpp​​
SimpleFactory.hpp#ifndef __SIMPLE_FACTORY__
#define __SIMPLE_FACTORY__
#include
#include
using namespace std;
//抽象产品类AbstractProduct
class AbstractSportProduct
{
public:
  AbstractSportProduct(){
  }
  virtual ~AbstractSportProduct(){};
  //抽象方法:
  // virtual void printName(){};
  virtual void printName() = 0;
  // virtual void play(){};
  virtual void play() = 0;
};
//具体产品类Basketball
class Basketball :public AbstractSportProduct
{
public:
  Basketball(){
    printName();
    play();
  }
  ~Basketball()
  {
  }
  //具体实现方法
  void printName(){
    printf("Jungle get Basketball\n");
  }
  void play(){
    printf("Jungle play Basketball\n");
  }
};
//具体产品类Football
class Football :public AbstractSportProduct
{
public:
  Football(){
    printName();
    play();
  }
  ~Football()
  {
  }
  //具体实现方法
  void printName(){
    printf("Jungle get Football\n");
  }
  void play(){
    printf("Jungle play Football\n");
  }
};
//具体产品类Volleyball
class Volleyball :public AbstractSportProduct
{
public:
  Volleyball(){
    printName();
    play();
  }
  ~Volleyball()
  {
   
  }
  //具体实现方法
  void printName(){
    printf("Jungle get Volleyball\n");
  }
  void play(){
    printf("Jungle play Volleyball\n");
  }
};
class Factory
{
public:
  std::shared_ptrAbstractSportProduct> getSportProduct(string productName)
  {
    std::shared_ptrAbstractSportProduct> pro;
    if (productName == "Basketball"){
      pro = std::shared_ptrAbstractSportProduct>(new Basketball());
    }
    else if (productName == "Football"){
      pro = std::shared_ptrAbstractSportProduct>(new Football());
    }
    else if (productName == "Volleyball"){
      pro = std::shared_ptrAbstractSportProduct>(new Volleyball());
    }
    return pro;
  }
};

#endif //__SIMPLE_FACTORY__
main.cpp#include
#include
#include "SimpleFactory.hpp"
int main()
{
  printf("简单工厂模式\n");
  
  //定义工厂类对象
  std::shared_ptrFactory> fac = std::make_sharedFactory>();
  // std::shared_ptr product = std::shared_ptr(fac->getSportProduct("Basketball"));
  std::shared_ptrAbstractSportProduct> product = fac->getSportProduct("Basketball");
  
  fac = std::make_sharedFactory>();
  product = fac->getSportProduct("Football");
  // product = std::shared_ptr(fac->getSportProduct("Football"));
  fac = std::make_sharedFactory>();
  product = fac->getSportProduct("Volleyball");  
  // product = std::shared_ptr(fac->getSportProduct("Volleyball"));
#ifdef win32
  system("pause");
#endif
  return 0;
}               
               
            
               
        
        

回复

使用道具 举报

全部回复0 显示全部楼层

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

楼主

审核员

热门推荐

联系客服 关注微信 下载APP 返回顶部 返回列表