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;
    }
  • 相关阅读:
    第十周总结
    冲刺(四)
    冲刺(三)
    冲刺(二)
    冲刺(一)
    生成热词
    c#简单日志类
    WPF 后台代码 实现DynamicResource 绑定赋值
    WPF ListboxItem 双击事件 Command绑定
    mysql的命令行安装,忘记密码,密码重置问题
  • 原文地址:https://www.cnblogs.com/osbreak/p/10106146.html
Copyright © 2011-2022 走看看