1. 需求one
A开BWM车:
类:
class BWMCar
{
public:
QString start()
{
return "start BWMCar\n";
}
QString stop()
{
return "stop BWMCar\n";
}
};
使用:
BWMCar *bwmCar = new BWMCar;
bwmCar->start();
bwmCar->stop();
2. 需求变更:A开BOBO车
普通方法:增加BOBOCar类;
类型:上/高层使用者变化较小,开BWM或BOBO,但都是车;而底层改动较大;
此类方法缺点:上层使用者需要更改的代码太多,如果更少?
{
public:
virtual QString start() = 0;
virtual QString stop() = 0;
};
class BWMCar : public AbstractCar
{
public:
QString start()
{
return "start BWMCar\n";
}
QString stop()
{
return "stop BWMCar\n";
}
};
class BoboCar : public AbstractCar
{
public:
QString start()
{
return "start BoboCar\n";
}
QString stop()
{
return "stop BoboCar\n";
}
};
class AbstractFactory
{
public:
virtual AbstractCar * createCar() = 0;
};
class BWMFactory : public AbstractFactory
{
public:
AbstractCar * createCar()
{
return new BWMCar;
}
};
class BoboFactory : public AbstractFactory
{
public:
AbstractCar * createCar()
{
return new BoboCar;
}
};
使用:
AbstractCar *bwmCar = (new BWMFactory)->createCar();//若更改BOBO,则new BWMFactory -》 new BoboFactory 即可
bwmCar->start();
bwmCar->stop();
UML:
