抽象工厂实现坦克大战(c++实现)
需求:坦克大战
创建两种坦克
坦克类型 | 射程 | 速度 |
b70 | 70米 | 时/70公里 |
b50 | 50米 | 时/70公里 |
class Function{
public String mStr;
Function(String str){
mStr = str;
exe();
}
public void exe() {
System.out.println(mStr);
}
};
// interface
interface IFun{
void exe();
}
interface ISpecificationOfTank{
int getSpecification();
}
//abstract
abstract class ConcreteFun implements IFun{
public ConcreteFun(ISpecificationOfTank s) {
mSpecificationOfTank = s;
}
protected ISpecificationOfTank mSpecificationOfTank;
}
class ConcreteSpecification implements ISpecificationOfTank{
int mSpecification;
public ConcreteSpecification(int value) {
mSpecification = value;
}
public int getSpecification() {
return mSpecification;
}
}
// Concrete
class Shot extends ConcreteFun{
public Shot(ISpecificationOfTank s) {
super(s);
}
public void exe() {
Function f = new Function("发射距离"+mSpecificationOfTank.getSpecification()+"米");
}
}
class Run extends ConcreteFun{
public Run(ISpecificationOfTank s) {
super(s);
}
public void exe() {
Function f = new Function("速度"+mSpecificationOfTank.getSpecification()+"公里");
}
}
class Tank{
Shot mShot;
Run mRun;
public Tank(Shot s,Run r) {
mShot = s;
mRun = r;
}
public void exe() {
mShot.exe();
mRun.exe();
}
}
// AbstractFactory
interface IFactory{
Shot createShot();
Run createRun();
}
abstract class Factory implements IFactory{
ISpecificationOfTank mSpecificationOfTank;
public Shot createShot() {
return new Shot(mSpecificationOfTank);
}
public Run createRun() {
return new Run(mSpecificationOfTank);
}
}
class B70Factory extends Factory{
public B70Factory() {
mSpecificationOfTank = new ConcreteSpecification(70);
}
}
class B50Factory extends Factory{
public B50Factory() {
mSpecificationOfTank = new ConcreteSpecification(50);
}
}
public class Client {
public static void main(String[] args) {
System.out.println("hello worldff !");
B70Factory f = new B70Factory();
Tank t = new Tank(f.createShot(),f.createRun());
t.exe();
}
}