您的位置:首页 > 编程语言 > C语言/C++

简单工厂模式的C++实现【设计模式】

2013-11-17 20:55 288 查看
最近没事吧就把设计模式上的一些模式用C++来实现一下。

实现代码如下:【用四则运算做演示】

#include <iostream>

using namespace std;

class Operation

{

private:

int m_numberA;
//我始终认为类成员都应该为私有成员,对它的访问应该在成员函数中实现

int m_numberB;

public:

Operation(int, int);
//声明与实现

void SetA(int);

void SetB(int);

int GetA();

int GetB();

virtual int GetResult() = 0;//在这里没必要实现,故定义为纯虚函数

};

Operation::Operation(int numberA, int numberB)

{

m_numberA = numberA;

m_numberB = numberB;

}

void Operation::SetA(int numberA)

{

m_numberA = numberA;

}

void Operation::SetB(int numberB)

{

m_numberB = numberB;

}

int Operation::GetA()

{

return m_numberA;

}

int Operation::GetB()

{

return m_numberB;

}

class OperationAdd:public Operation //加法

{

public:

OperationAdd(int numberA = 0, int numberB = 0):Operation(numberA,numberB)

{}

int GetResult();

};

int OperationAdd::GetResult()

{

return GetA()+GetB();

}

class OperationSub:public Operation //减法

{

public:

OperationSub(int numberA = 0, int numberB = 0):Operation(numberA,numberB)

{}

int GetResult();

};

int OperationSub::GetResult()

{

return GetA()-GetB();

}

//乘法、除法、开方等其他由操作自己完成

class SimpleFactory

{

private:

Operation *m_opr;

char m_op;

public:

SimpleFactory(char);

Operation *factory();

};

SimpleFactory::SimpleFactory(char op)

{

m_op = op;

}

Operation* SimpleFactory::factory()

{

switch (m_op)

{

case '+':

m_opr = new OperationAdd;

break;

case '-':

m_opr = new OperationSub;

break;

}

return m_opr;

}

int main()

{

Operation *op;

SimpleFactory *sf = new SimpleFactory('-');
//如果想要用加法只需将“-”改为“+”即可

op = sf->factory();

op->SetA(1);

op->SetB(2);

cout<<op->GetResult()<<endl;

return 0;

}



C++的确是一种很难学的语言。

自己总结的不好,在百度上抄点


优点

工厂类是整个模式的关键.包含了必要的逻辑判断,根据外界给定的信息,决定究竟应该创建哪个具体类的对象.通过使用工厂类,外界可以从直接创建具体产品对象的尴尬局面摆脱出来,仅仅需要负责“消费”对象就可以了。而不必管这些对象究竟如何创建及如何组织的.明确了各自的职责和权利,有利于整个软件体系结构的优化。

缺点

由于工厂类集中了所有实例的创建逻辑,违反了高内聚责任分配原则,将全部创建逻辑集中到了一个工厂类中;它所能创建的类只能是事先考虑到的,如果需要添加新的类,则就需要改变工厂类了。

当系统中的具体产品类不断增多时候,可能会出现要求工厂类根据不同条件创建不同实例的需求.这种对条件的判断和对具体产品类型的判断交错在一起,很难避免模块功能的蔓延,对系统的维护和扩展非常不利;

这些缺点在工厂方法模式中得到了一定的克服。

使用场景

工厂类负责创建的对象比较少;

客户只知道传入工厂类的参数,对于如何创建对象(逻辑)不关心;

由于简单工厂很容易违反高内聚责任分配原则,因此一般只在很简单的情况下应用。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: