//operation.h#ifndef OPERATION_H_#define OPERATION_H_
class Operation{
protected:double numA;double numB;
public:voidsetNumberA(double numA){ this->numA = numA;}voidsetNumberB(double numB){ this->numB = numB;}
virtual doublegetResult()const=0;//纯虚方法};
class Add : public Operation{
public:doublegetResult()const{return this->numA + this->numB;}};
class Mul : public Operation{
public:doublegetResult()const{return this->numA * this->numB;}};
class Div : public Operation{
public:doublegetResult()const{return this->numA / this->numB;}};
class Sub : public Operation{
public:doublegetResult()const{return this->numA - this->numB;}};#endif
//main.cpp#include"operation.h"#include<iostream>
using namespace std;//简单工厂 //单个产品//工厂方法 //单个产品//抽象工厂 //批量产品的创建
class Factory{
public://sign 运算符 Operation* 运算对象 根据运算符创建不同的产品对象
Operation*createOper(char sign){
Operation* op =0;switch(sign){case'+':
op = new Add();break;case'-':
op = new Sub();break;case'*':
op = new Mul();break;case'/':
op = new Div();break;default:break;}return op;}};//开放封闭原则: 对拓展开放 对修改关闭intmain(void){double numA =0.0, numB =0.0;char sign ='\0';
cout <<"请输入运算公式:";
cin >> numA >> sign >> numB;//创建工厂
Factory f;//创建产品
Operation* p = f.createOper(sign);if(0== p){return0;}//运算
p->setNumberA(numA);
p->setNumberB(numB);double result = p->getResult();
cout << numA <<" "<< sign <<" "<< numB <<" = "<< result << endl;return0;}
动物表演
//animal.h#ifndef ANIMAL_H_#define ANIMAL_H_#include<iostream>
using namespace std;
class Animal{
public:
virtual voiddisplay()const=0;};
class Lion : public Animal{
private://...
public:voiddisplay()const{ cout <<"钻火圈"<< endl;}};
class Elephant : public Animal{
private://...
public:voiddisplay()const{ cout <<"喷水"<< endl;}};
class Dolphin : public Animal{
private://...
public:voiddisplay()const{ cout <<"转球"<< endl;}};#endif