1. 程式人生 > >c++建立型設計模式--工廠模式--簡單工廠(單個產品的構建)

c++建立型設計模式--工廠模式--簡單工廠(單個產品的構建)

思想 主要是對於單個簡單的產品進行構建 基類

#pragma once
#include <iostream>
/**
 * 基類指標
 *Date :[10/12/2018 ]
 *Author :[RS]
 */
 class  CarBase {
public:
	virtual ~CarBase() {
		std::cout << "析構 carBase" << std::endl;
	}
	virtual void PrintName() {
		printf("騎車生產廠商:%s\n",mStrName.c_str());
	}
protected:
	CarBase() {};
	CarBase(const std::string& name) :mStrName(name) {};
	std::string mStrName;

};

子類

#pragma once
#include "CarBase.hpp"
/**
 *3個基類的具體子類 
 *Date :[10/12/2018 ]
 *Author :[RS]
 */
class GMCar :public CarBase {
public:
	GMCar() :CarBase("通用汽車公司") {}
	void PrintName()override {
		std::cout << "GMCar PrintName" << std::endl;
		CarBase::PrintName();
	}
};

class FordCar :public CarBase {
public:
	FordCar() :CarBase("FordCar公司") {}
	void PrintName()override {
		std::cout << "GMCar PrintName" << std::endl;
		CarBase::PrintName();
	}
};

class ToyotaCar :public CarBase {
public:
	ToyotaCar() :CarBase("ToyotaCar汽車公司") {}
	void PrintName()override {
		std::cout << "GMCar PrintName" << std::endl;
		CarBase::PrintName();
	}
};


工廠類

#pragma once
#include "CarBaseExtens.hpp"
#include <memory>
#include <cassert>
/**
 *簡單工廠類 
 *簡單工廠比較適合從配置檔案讀取例項化的型別這樣就可以通過配置檔案指定
 例項化的物件指標
 *Date :[10/12/2018 ]
 *Author :[RS]
 */
class CarFactory {
public:
	static std::shared_ptr<CarBase> Create(const std::string &name) {
		std::shared_ptr<CarBase> car;
		if ("1" == name) {
			car = std::make_shared<GMCar>();
		}
		else if ("2" == name) {
			car=std::make_shared<FordCar>();
		}
		else if ("3" == name) {
			car = std::make_shared<ToyotaCar>();
		}
		else {
			assert(false);//彈出錯誤對話
		}
		return car;
	}
	static void TEST() {
		{
			auto car = CarFactory::Create("1");
			car->PrintName();
		}
		{
			auto car = CarFactory::Create("2");
			car->PrintName();
		}
		{
			auto car = CarFactory::Create("3");
			car->PrintName();
		}
	}
};

測試

#include "CarFactory.hpp"


void main() {
	CarFactory::TEST();
	system("pause");
}

測試結果