• 工厂模式


    工厂方法模式

    先看一下最原始的程序伪代码:

    MainForm1.cpp:

    class MainForm :public Form{
        TextBox* txtFilePath;
        TextBox* txtFileNumber;
        ProgressBar* progressBar;
    
    public:
        void Button1_Click()
        {
            string filePath = txtFilePath->getText();
            int number = atoi(txtFileNumber->getText().c_str());
    
            FileSplitter* splitter = new FileSplitter(filePath,number);
    
            splitter->split();
        }
    };

    Splitter1.cpp:

    class FileSplitter
    {
    public:
        void split()
        {
            //.....
    
        }
    };

    当有需求了:

    MainForm2.cpp:

    class MainForm :public Form{
    
        SplitterFactory* factory;
    public:
        MainForm(SplitterFactory* factory){
            this->factory = factory;
        }
    
        void Button1_Click()
        {
            ISplitter* splitter = factoryy.CreateSplitter;//依赖具体类
    
            splitter->split();
        }
    };

    Splitter2.cpp:

    //具体类
    class BinarySplitter : public ISplitter
    {
    
    };
    
    class TxtSplitter : public ISplitter
    {
    
    };
    
    class PictureSplitter : public ISplitter
    {
    
    };
    
    class VideoSplitter : public ISplitter
    {
    
    };
    
    //具体工厂
    class BinarySplitterFactory :public SplitterFactory{
    public:
        virtual ISplitter* CreateSplitter(){
            return new BinarySplitter();
        }
    };
    
    class TxtSplitterFactory :public SplitterFactory{
    public:
        virtual ISplitter* CreateSplitter(){
            return new TxtSplitter();
        }
    };
    
    class PictureSplitterFactory :public SplitterFactory{
    public:
        virtual ISplitter* CreateSplitter(){
            return new PictureSplitter();
        }
    };
    
    class VideoSplitterFactory :public SplitterFactory{
    public:
        virtual ISplitter* CreateSplitter(){
            return new VideoSplitter();
        }
    };

    SplitterFactory.cpp:

    //工厂基类
    class SplitterFactory{
    public:
        virtual ISplitter* CreateSplitter() = 0;
        virtual ~SplitterFactory();
    };
    
    
    //抽象基类
    class ISplitter{
    public:
        virtual void split() = 0;
        virtual ~ISplitter();
    };

    工厂模式的应用前景:

    1.工厂模式的目的是为了实现解耦,将对象的创建和使用分开,即应用程序将对象的创建和初始化职责交给工厂对象。若一个对象A想要调用对象B时,如果直接通过new关键字来创建一个B实例,然后调用B实例,这样做的不好处是,当需求变更,要将B实例换成C实例时,则需要修改所有new了该实例的方法。

    2.降低代码重复。如果对象B的创建过程比较复杂,并且很多地方都用到了,那么很可能出现很多重复的代码,通过统一将创建对象B的代码放到工厂里面统一管理,可以减少代码的重复率,同时也方便维护。相比于构造函数来说,复杂的初始化,会使得构造函数非常的复杂。

    由于创建过程都由工厂统一的管理,有利于当业务发生变化之后的修改

    3.工厂模式将创建和使用分离,使用者不需要知道具体的创建过程,只需要使用即可。

    4.类本身有很多子类,并且经常性发生变化。

    总体概括:

    创建对象需要大量重复的代码。

    创建对象需要访问某些信息,而这些信息不应该包含在复合类中。

    创建对象的生命周期必须集中管理,以保证在整个程序中具有一致的行为。

  • 相关阅读:
    注册课程程序
    WEB_03
    JAVAWEB学习 HTML&CSS
    JAVAWEB -HTML学习
    二柱子——四则运算——王建民
    JAVA假期第十三天2020年7月18日
    JAVA假期第十二天2020年7月17日
    JAVA假期第十四天2020年7月19日
    JAVA假期第十一天2020年7月16日
    数据库规约
  • 原文地址:https://www.cnblogs.com/zhuifeng-mayi/p/11061305.html
Copyright © 2020-2023  润新知