坦克大战-抽象工厂实现

需求:坦克大战

创建两种坦克

坦克类型 射程 速度
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;
}

猜你喜欢

转载自blog.csdn.net/xie__jin__cheng/article/details/88711465