坦克大战-抽象工厂实现
需求:坦克大战
创建两种坦克
坦克类型 | 射程 | 速度 |
b70 | 70米 | 时/70公里 |
b50 | 50米 | 时/70公里 |
类图
说明
看到这张类库,可以明显的看到,这里和工厂模式的坦克大战比,是把两个机能,发射和速度当做抽象工厂中的一系列产品。
代码(c++)
#include <iostream>
#include <string>
using namespace std;
class Function{
public:
string mFunction;
Function(string str){
mFunction = str;
}
void exe(){
cout<<mFunction<<"\n";
}
};
//抽象层
class AbstractShot{
public:
virtual void fun()=0;
};
class AbstractRun{
public:
virtual void fun()=0;
};
class AbstractFactory{
public:
virtual AbstractShot& createShot()=0;
virtual AbstractRun& createRun()=0;
};
//实施层
class B70Shot: public AbstractShot{
public:
virtual void fun(){
Function function("B70Shot:射程70");
function.exe();
}
};
class B50Shot: public AbstractShot{
public:
virtual void fun(){
Function function("B50Shot:射程50");
function.exe();
}
};
class B70Run: public AbstractRun{
public:
virtual void fun(){
Function function("B70Run:速度70");
function.exe();
}
};
class B50Run: public AbstractRun{
public:
virtual void fun(){
Function function("B50Run:速度50");
function.exe();
}
};
class B70Factory:public AbstractFactory{
public:
virtual AbstractShot& createShot(){
return *(new B70Shot());
}
virtual AbstractRun& createRun(){
return *(new B70Run());
}
};
class B50Factory:public AbstractFactory{
public:
virtual AbstractShot& createShot(){
return *(new B50Shot());
}
virtual AbstractRun& createRun(){
return *(new B50Run());
}
};
// 客户端
class Client{
public:
static void main(){
B70Factory b70;
AbstractFactory& f = b70;
AbstractShot& s = f.createShot();
AbstractRun& r = f.createRun();
s.fun();
r.fun();
}
};
//客户端调用
int main()
{
Function function("抽象工厂模式演示");
function.exe();
Client::main();
//看代码不用考虑以下内容
int cin_a;
cin>>cin_a;
return 0;
}