简单工厂模式
定义一个抽象类,即汽车
定义具体的汽车类型,继承自抽象类,即宝马和奔驰
定义一个工厂类,用于生产不同类型的汽车 ``#include
using namespace std;
enum CarType{BENZ, BMW};
class Car//车类
{
public:
virtual void createdCar(void) = 0;
};
class BenzCar : public Car //奔驰车
{
public:
BenzCar()
{
cout<<"Benz::Benz()"<<endl;
}
virtual void createdCar(void)
{
cout<<"BenzCar::createdCar()"<<endl;
}
~BenzCar()
{
}
};
class BmwCar : public Car //宝马车
{
public:
BmwCar()
{
cout<<"Bmw::Bmw()"<<endl;
}
virtual void createdCar(void)
{
cout<<"BmwCar::createdCar()"<<endl;
}
};
class CarFactory //车厂
{
public:
Car* createSpecificCar(CarType type)
{
switch(type)
{
case BENZ://生产奔驰车
return (new BenzCar());
break;
case BMW://生辰宝马车
return (new BmwCar());
break;
default:
return NULL;
break;
}
}
};
int main(int argc, char** argv)
{
CarFactory carfac;
Car* specificCarA = carfac.createSpecificCar(BENZ);//看到网上众多示例在new后没有delete,感觉不是特别严谨
Car* specificCarB = carfac.createSpecificCar(BMW);
delete specificCarA; delete specificCarB;
return 0;
}``
为了加深学习,笔者写了一个实现计算器的代码
``#include
using namespace std;
class operation //运算的抽象类
{
public:
double number_a=0;
double number_b=0;
public:
void Number_a(double a){number_a=a;}
void Number_b(double b){number_b=b;}
virtual double getResult(){
return 10086;
}
};
class operation_add:public operation // 加法
{
public:
virtual double getResult(){
double result=number_a+number_b;
return result;
}
};
class operation_sub:public operation // 减法
{
public:
virtual double getResult(){
double result=number_a-number_b;
return result;
}
};
class operation_mul:public operation // 乘法
{
public:
virtual double getResult(){
double result=number_a*number_b;
return result;
}
};
class operation_div:public operation // 除法
{
public:
virtual double getResult(){
if(abs(number_b)<1e-7){
std::cout<<"divisor == 0"<<std::endl;
return 0;
}
double result=number_a/number_b;
return result;
}
};
class operationFactory
{
public:
operation* createOperate(char operate){
switch (operate)
{
case '+':
return new operation_add();
break;
case '-':
return new operation_sub();
break;
case '*':
return new operation_mul();
break;
case '/':
return new operation_div();
break;
default:
std::cout<<"Please input correct operation"<<std::endl;
break;
}
}
};
int main(int argc, char** argv)
{
operationFactory factory;
operation* oper=factory.createOperate('*');
oper->Number_a(3);
oper->Number_b(2);
double result=oper->getResult();
cout<<result<<endl;
return 0;
}``