工厂模式
来源:互联网 发布:ipad pro 10.5 知乎 编辑:程序博客网 时间:2024/05/17 03:06
工厂模式的使用情景
1、客户类不关心使用哪个具体类,只关心该接口所提供的功能
2、创建过程比较复杂,比如需要初始化其他关联的资源类,服务配置文件等
3、接口有很多具体实现或抽象类有很多具体子类时,你可能需要为客户代码写一大串if-else
逻辑来决定运行时使用哪个具体实现或者具体子类
4、不希望给客户程序暴露过多此类的内部结构,隐藏这些细节可以降低耦合度。
5、优化性能,比如缓存大对象或者初始或比较耗时的对象
工厂模式属于创建型模式,大致可分为三类,简单工厂模式、工厂方法模式、抽象工厂模式。
简单工厂模式:在工厂类中做判断,从而创造响应的产品。
简单工厂模式UML图
enmu CTYPE {COREA, COREB};//枚举class SingleCore{public: virtual void Show() = 0;//纯虚函数};class SingleCoreA: public SingleCore{public: void show(){ cout << "SingleCore A" << endl; }};class SingleCoreB: public SingleCore{public: void Show(){ cout << "SingleCore B" << endl; }};class Factory{public: SingleCore* CreateSingleCore(enum CTYPE ctype){ if(ctype == COREA) return new SingleCoreA();//生产核A else if(ctype == COREB) return new SingleCoreB();//生产核B else return NULL }};
工厂方法模式:指定义一个用于创建对象的接口,让子类决定实例化哪一个类。
工厂方法模式UML图
class SingleCore{public: virtual void Show() = 0;//纯虚函数};class SingleCoreA: public SingleCore{public: void show(){ cout << "SingleCore A" << endl; }};class SingleCoreB: public SingleCore{public: void Show(){ cout << "SingleCore B" << endl; }};class Factory{public: virtual SingleCore* CreateSingleCore() = 0;};//生产A核的工厂class FactoryA{public: SingleCoreA* CreateSingleCore(){ return new SingleCoreA; }};//生产B核的工厂class FactoryB{public: SingleCoreB* CreateSingleCore(){ return new SingleCoreB; }};
抽象工厂模式:工厂A只生产A型号的产品。。。。。
抽象工厂模式UML图
class SingleCore{public: virtual void Show() = 0;//纯虚函数};class SingleCoreA: public SingleCore{public: void show(){ cout << "SingleCore A" << endl; }};class SingleCoreB: public SingleCore{public: void Show(){ cout << "SingleCore B" << endl; }};class MultiCore{public: virtual void Show() = 0;};class MultiCoreA: public MultiCore{public: void Show(){ cout << "MultiCore A" << endl; }};class MultiCoreB: public MultiCore{public: void Show(){ cout << "MultiCore B" << endl; }};class Factory{public: virtual SingleCore* CreateSingleCore() = 0; virtual MultiCore* CreateMultiCore() = 0;};//工厂A,专门用来生产A型号的处理器class FactoryA{public: SingleCoreA* CreateSingleCore(){ return new SingleCoreA; } MultiCoreA* CreateMultiCore(){ return new MultiCoreA; }};//工厂B,专门用来生产B型号的处理器class FactoryB{public: SingleCoreB* CreateSingleCore(){ return new SingleCoreB; } MultiCoreB* CreateMultiCore(){ return new MultiCoreB; }};
阅读全文
0 0
- 工厂模式 -- 工厂方法
- 工厂模式 -- 抽象工厂
- 工厂模式-简单工厂
- 工厂模式-工厂方法
- 工厂模式:静态工厂
- 工厂模式-简单工厂
- 工厂模式-抽象工厂
- 工厂模式-工厂方法
- 工厂 > 工厂方法模式
- 工厂模式-静态工厂
- 工厂模式-抽象工厂
- 工厂模式
- 工厂模式
- 工厂模式
- 工厂模式
- 工厂模式
- 工厂模式
- 工厂模式
- ajax属性的删,修。selected,chaecked,readonly,disabled,noresize。oncilck的另一种写法。自定义创建$()。回车监听事件。追加方法
- javascript原型链
- 程序设计模式(十六) C++ 备忘录( Memento)模式
- BZOJ 1011-遥远的行星(近似计算)
- sklearn中的异常检测方法
- 工厂模式
- UVA 1629 Cake slicing(四维DP)【分割格子类模板】
- 产品团队之矩阵式组织结构
- 关于ViewPager嵌套Fragment,第二次加载数据不显示问题
- jvm之Java代码的编译和执行
- reactjs 中运用swiper 插件时 点击事件失效问题
- 新手学习vue必看
- web中TextBox的onblur onload 属性
- andriod返回时刷新上一级activity实现