《GeekBand》C++设计模式02

来源:互联网 发布:考试宝典怎么样知乎 编辑:程序博客网 时间:2024/06/14 23:00

工厂方法(简单工厂)

定义:

定义一个用于创建对象的接口,让子类决定实例化哪一个类。Factory Method是得一个类的实例化延迟(目的:解耦,手段:虚函数)到子类。——《设计模式》GoF


exp:实现一个多类型的分割器

//抽象类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();}};


要点:

工厂模式用于隔离对象使用者和具体类型的紧耦合关系。通过面向对象的手法将具体工作延迟到子类,实现了解耦。

缺点:要求创建方法和参数相同


遗留问题,外层如何选择该创建的类型呢?使用参数传递,感觉还是需要指定啊,还是有耦合关系啊。


0 0
原创粉丝点击