/* * @Description: * @version: * @Author: 莫邪 * @Date: 2023-10-09 09:30:04 * @LastEditors: 莫邪 * @LastEditTime: 2023-10-09 09:49:43 */ #include #include class AbstractBall { public: virtual ~AbstractBall() = default; virtual void play() = 0; }; class BasketBall : public AbstractBall { public: BasketBall() { play(); } void play() override { std::cout << "play basketball" << std::endl; } }; class Football : public AbstractBall { public: Football() { play(); } void play() override { std::cout << "play football" << std::endl; } }; class Volleyball : public AbstractBall { public: Volleyball() { play(); } void play() override { std::cout << "play volleyball" << std::endl; } }; class AbstractShirt { public: virtual ~AbstractShirt() = default; virtual void wear() = 0; }; class BasketShirt : public AbstractShirt { public: BasketShirt() { wear();} void wear() override { std::cout << "wear basketShirt" << std::endl;} }; class FootballShirt : public AbstractShirt { public: FootballShirt() { wear();} void wear() override { std::cout << "wear footballShirt" << std::endl;} }; class VolleyballShirt : public AbstractShirt { public: VolleyballShirt() { wear();} void wear() override { std::cout << "wear volleyballShirt" << std::endl;} }; class AbstractFactory { public: virtual ~AbstractFactory() = default; virtual std::shared_ptr createBall() = 0; virtual std::shared_ptr createShirt() = 0; }; class BasketballFactory : public AbstractFactory { public: std::shared_ptr createBall() override { return std::make_shared(); } std::shared_ptr createShirt() override { return std::make_shared();} }; class FootballFactory : public AbstractFactory { public: std::shared_ptr createBall() override { return std::make_shared(); } std::shared_ptr createShirt() override { return std::make_shared();} }; class VolleyballFactory : public AbstractFactory { public: std::shared_ptr createBall() override { return std::make_shared(); } std::shared_ptr createShirt() override { return std::make_shared();} };