设计模式(七)factory method

来源:互联网 发布:阿里云acp认证 编辑:程序博客网 时间:2024/06/05 06:27

1.使用场景:需要创建的对象的具体类型经常变化,多态“new”
2.理论依据:虚函数、多态
3.定义:用于创建对象的接口,让子类决定实例化哪一个类,
使得一个类的实例化延迟(目的:解耦,手段:虚函数)到子类
4.步骤:创建工厂基类(含纯虚函数),并创建工厂子类,各工厂子类对应不同的需创建的类型,通过调用工厂基类指针实现多态“new”。
5.技法:早绑定->晚绑定
6.变化:对应不同的需创建的对象,要有不同子类工厂
不变:工厂指针所在类的代码

原代码:

class ISplitter{public:    virtual void split()=0;    virtual ~ISplitter(){}};class BinarySplitter : public ISplitter{    };class TxtSplitter: public ISplitter{    };class PictureSplitter: public ISplitter{    };class VideoSplitter: public ISplitter{    };class MainForm : public Form{TextBox* txtFilePath;TextBox* txtFileNumber;ProgressBar* progressBar;public:void Button1_Click(){        ISplitter * splitter=            new BinarySplitter();//依赖具体类                splitter->split();}};


使用factory method 模式的代码:

//抽象类class ISplitter{public:    virtual void split()=0;    virtual ~ISplitter(){}};//工厂基类class SplitterFactory{public:    virtual ISplitter* CreateSplitter()=0;    virtual ~SplitterFactory(){}};//具体类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();    }};class MainForm : public Form{    SplitterFactory*  factory;//工厂public:        MainForm(SplitterFactory*  factory){        this->factory=factory;    }    void Button1_Click(){        ISplitter * splitter=            factory->CreateSplitter(); //多态new                splitter->split();}};



原创粉丝点击