工厂方法
#include <iostream>
#include <memory>
class Transport {
public:
virtual ~Transport(){}
virtual void deliver() const = 0;
};
class Truck :public Transport{
public:
virtual ~Truck(){}
void deliver() const override
{
std::cout << "卡车运输货物中ing:\n";
}
};
class Ship :public Transport {
public:
virtual ~Ship(){}
void deliver()const override
{
std::cout << "轮船运输货物中ing:\n";
}
};
class Logistics {
public:
virtual ~Logistics() {}
virtual std::shared_ptr<Transport> FactoryMethod() const = 0;
void doSomething()
{
std::shared_ptr<Transport> truck = FactoryMethod();
truck->deliver();
}
};
class TruckLogistics : public Logistics {
public:
virtual ~TruckLogistics() {}
virtual std::shared_ptr<Transport> FactoryMethod() const override
{
return std::make_shared<Truck>();
}
};
class ShipLogistics : public Logistics {
public:
virtual ~ShipLogistics() {}
virtual std::shared_ptr<Transport> FactoryMethod() const override
{
return std::make_shared<Ship>();
}
};
int main()
{
std::shared_ptr<TruckLogistics> truckLogistics = std::make_shared<TruckLogistics>();
truckLogistics->doSomething();
std::shared_ptr<ShipLogistics> shipLogistics = std::make_shared<ShipLogistics>();
shipLogistics->doSomething();
return 0;
}