zoukankan      html  css  js  c++  java
  • 抽象工厂模式

    简单工厂和工厂模式都是指的是一类相同的类。

    抽象工厂是针对的多个类的对象的组合。
    提供一个创建一系列相关或相互依赖对象的接口,而无需指定他们具体的类。
    
    实现:分别为火车和飞机制造发动机和轮胎,火车和飞机用不同的发动机和轮胎。
    //抽象产品 发动机
    class Engine
    {
    public:
        virtual void makeEngine() = 0;
    };
    //具体产品 火车发动机
    class TrainEngine :public Engine
    {
    public:
        void makeEngine(){cout << "Train Engine" << endl;}
    };
    //具体产品 飞机发动机
    class PlaneEngine :public Engine
    {
    public:
        void makeEngine(){cout << "Plane Engine" << endl;}
    };
    //抽象产品 轮胎
    class Tyre
    {
    public:
        virtual void makeTyre() = 0;
    };
    //具体产品 火车轮胎
    class TrainTyre :public Tyre
    {
    public:
        void makeTyre(){cout << "Train Tyre" << endl;}
    };
    //具体产品 飞机轮胎
    class PlaneTyre :public Tyre
    {
    public:
        void makeTyre(){cout << "Plane Tyre" << endl;}
    };
    //抽象工厂 
    class Factory
    {
    public:
        virtual Engine* cerateEngine() = 0;
        virtual Tyre* createTyre() = 0;
    };
    //具体工厂 火车工厂
    class TrainFactory :public Factory
    {
        Engine* cerateEngine()
        {
            Engine* trainEngine = new TrainEngine();
            return trainEngine;
        }
        Tyre* createTyre()
        {
            Tyre* trainTyre = new TrainTyre();
            return trainTyre;
        }
    };
    //具体工厂 飞机工厂
    class PlaneFactory :public Factory
    {
        Engine* cerateEngine()
        {
            Engine* planeEngine = new PlaneEngine();
            return planeEngine;
        }
        Tyre* createTyre()
        {
            Tyre* planeTyre = new PlaneTyre();
            return planeTyre;
        }
    };
    int main()
    {
        Factory* factory = new TrainFactory();
    Engine
    * engine = factory->cerateEngine(); Tyre* tyre = factory->createTyre(); engine->makeEngine(); tyre->makeTyre(); factory = new PlaneFactory(); engine = factory->cerateEngine(); tyre = factory->createTyre(); engine->makeEngine(); tyre->makeTyre(); delete factory; delete engine; delete tyre; return 0; }
  • 相关阅读:
    什么是JSON?
    Linux命令 之 less
    oracle删除表语句
    DB2错误码(续)
    DB2错误号汇总
    HTTP 响应码
    硬盘 NTFS格式 与 exFAT格式 的比较
    关于spring的配置文件总结(转)
    logback与Spring、SpringMVC结合使用教程(转)
    在vue中使用elementUi的回到顶部backToTop组件
  • 原文地址:https://www.cnblogs.com/osbreak/p/10111237.html
Copyright © 2011-2022 走看看