1. 程式人生 > >設計模式-簡單工廠模式

設計模式-簡單工廠模式

sha include highlight namespace 簡單工廠模式 case int 工廠模式 argv

簡單工廠模式:是一種實例化對象的方式,只要輸入實例化對象的名字,就可以通過工廠對象的相應工廠函數來制造你需要的對象

核心是,對於一個父類的多個繼承子類,工廠對象的工廠函數根據用戶輸入,自動new 出一個子類對象 並返回其父類的指針,這樣利用父類的指針執行父類的虛函數,就可以動態綁定子類的重寫函數,從而實現多態.

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <iostream>
#include  <memory>

using namespace std;

class Operation
{
private:
	double A, B;
public:
	double GetA() const {return A;}
	double GetB() const {return B;}
	void SetA(double x) {A=x;}
	void SetB(double y) {B=y;}
	double virtual GetResult(){return 0;}
	Operation():A(0), B(0){}
};

class Add : public Operation
{
public:
	double GetResult()
	{
		return GetA()+GetB();
	}
};

class Sub : public Operation
{
public:
	double GetResult()
	{
		return GetA()-GetB();
	}
};

class Mul : public Operation
{
public:
	double GetResult()
	{
		return GetA()*GetB();
	}
};

class Div : public Operation
{
public:
	double GetResult()
	{
		return GetA()/GetB();
	}
};

class SimpleFactory
{
public:
	static Operation * CreateOpeartor(char ch)
	{
		Operation * p;
		switch(ch)
		{
		case ‘+‘:
			p = new Add();
			break;
		case ‘-‘:
			p = new Sub();
			break;
		case ‘*‘:
			p = new Mul();
			break;
		case ‘/‘:
			p = new Div();
			break;
		}
		return p;
	}
};

int main(int argc, char *argv[])
{
	double A = 0;
	double B = 0;
	char ch = ‘\0‘;
	cin>>A>>ch>>B;

	tr1::shared_ptr<Operation> op(SimpleFactory::CreateOpeartor(ch));
	op->SetA(A);
	op->SetB(B);
	cout<<op->GetResult()<<endl;
	system("pause");
	return 0;
}

  

設計模式-簡單工廠模式