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

    每次添加一个子类都必须在工厂类中添加一个判断分支,这样违背了开放-封闭原则,因此,工厂模式就是为了解决这个问题而产生的。
    既然每次都要判断,那我就把这些判断都生成一个工厂子类,这样,每次添加产品子类的时候,只需再添加一个工厂子类就可以了。
    这样就完美的遵循了开放-封闭原则。
    常用的场景
    基本与简单工厂模式一致,只不过是改进了简单工厂模式中的开放-封闭原则的缺陷,使得模式更具有弹性。将实例化的过程推迟到子类中,由子类来决定实例化哪个。
    优点
    基本与简单工厂模式一致,多的一点优点就是遵循了开放-封闭原则,使得模式的灵活性更强。
    //抽象产品类 制造类
    class Make
    {
    public:
        virtual void make() = 0;
    };
    
    //具体产品类 制造火车类
    class MakeTrain :public Make
    {
    public:
        void make() { cout<<"make Train"<<endl; }
    };
    
    //具体产品类 制造飞机类
    class MakePlane :public Make
    {
    public:
        void make() { cout << "make Plane" << endl; }
    };
    //抽象工厂类 
    class Factory
    {
    public:
        //返回具体产品类的指针
        virtual Make* createProduct() = 0;
    };
    
    //具体工厂类 制造火车的工厂
    class TrainFactory :public Factory
    {
    public:
        Make * createProduct()
        {
            Make* train = new MakeTrain();
            return train;
        }
    };
    
    //具体工厂类 制造飞机的工厂
    class PlaneFactory :public Factory
    {
    public:
        Make * createProduct()
        {
            Make* plane = new MakePlane();
            return plane;
        }
    };
    int main()
    {
        Factory * factory = new TrainFactory();
        Make *product = factory->createProduct();
        product->make();
    
        factory = new PlaneFactory();
        product = factory->createProduct();
        product->make();
    
        delete factory;
        delete product;
    }
  • 相关阅读:
    配置webstorm使用supervisor时出现 /usr/bin/env: node: 没有那个文件或目录 解决方法
    解决Ubuntu不能挂载ntfs格式硬盘
    git远程操作
    git重写历史记录
    git撤销命令
    git查看历史命令
    git分支管理和stash
    git的忽略文件和删除文件操作
    homebrew学习(四)之取消homebrew自动更新
    homebrew学习(三)之homebrew命令
  • 原文地址:https://www.cnblogs.com/osbreak/p/10106146.html
Copyright © 2011-2022 走看看