设计模式学习(七)————工厂方法模式
来源:互联网 发布:电脑版淘宝是哪个版本 编辑:程序博客网 时间:2024/05/22 07:01
使用一个例子是实现一个雷锋的例子,使用工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例延迟到其子类!
注意:它和简单工厂的区别是没有违背开放–封闭原则,简单工厂在工厂类里面通过逻辑实例话对应的类,违背了开放–封闭原则
雷锋和雷锋工厂的头文件是这样实现的:
#ifndef LEIFENG#define LEIFENG#include <QtDebug>class LeiFeng{public: void Sweep() { qDebug() <<"扫地"; } void Wash() { qDebug() <<"洗衣服"; } void BuyRice() { qDebug() <<"买米"; } virtual ~LeiFeng(){}};class Undergraduate final:public LeiFeng{};class Volunteer final:public LeiFeng{};#endif // LEIFENG#ifndef LEIFENGFACTORY#define LEIFENGFACTORY#include "leifeng.h"class LeiFenngInterface{public: virtual LeiFeng *CreateLeiFeng() = 0; virtual ~LeiFenngInterface(){}};class UndergraduateFactory final:public LeiFenngInterface{public: LeiFeng *CreateLeiFeng() override { return new Undergraduate(); }};class VolunteerFactory final:public LeiFenngInterface{public: LeiFeng *CreateLeiFeng() override { return new Volunteer(); }};#endif // LEIFENGFACTORY
然后就可以在主函数中这样测试工厂方法模式。
#include "leifengfactory.h"#include "leifeng.h"#include <QtDebug>int main(int argc , char *argv[]){ LeiFenngInterface *factory = new UndergraduateFactory(); LeiFeng *lf = factory->CreateLeiFeng(); lf->BuyRice(); lf->Sweep(); lf->Wash(); qDebug() <<"测试完毕!"; return 0;}
最后放上源码地址:https://github.com/Dongzhixiao/designMode_qt/tree/master/studyLeifeng_factoryMethod_pattern_8
0 0
- 设计模式学习—工厂方法模式
- 设计模式学习(七)————工厂方法模式
- 设计模式学习笔记——简单工厂模式、工厂方法模式、抽象工厂模式
- Head First 设计模式学习——简单工厂方法-工厂方法模式-抽象工厂模式
- 学习设计模式——工厂方法
- 设计思想学习—工厂方法模式
- 设计模式—工厂方法
- 设计模式—工厂方法
- 设计模式——抽象工厂模式、工厂方法模式
- 设计模式学习笔记——工厂方法模式
- JAVA设计模式学习5——工厂方法模式
- 学习设计模式之禅——工厂方法模式
- 设计模式学习2——工厂方法模式
- 设计模式学习笔记——工厂方法模式
- 设计模式学习笔记——工厂方法模式
- 设计模式学习笔记——工厂方法模式
- (@WhiteTaken)设计模式学习——工厂方法模式
- (@WhiteTaken)设计模式学习——工厂方法模式
- HTML5编程(任务二 零基础HTML及CSS编码)(20160909-0040)
- JS中关于clientWidth offsetWidth scrollWidth 等的含义
- 优化3D分子构型的方法有哪些
- 终极讲解:java中HashMap,LinkedHashMap,TreeMap,HashTable的区别
- nyoj_746 整数划分(四)
- 设计模式学习(七)————工厂方法模式
- 网易校招笔试-暗黑串
- win10 程序最小化不在任务栏了?在左下角
- Maven项目生成idea项目文件
- Qt 窗口置顶
- Java判断是否为手机端访问
- 分组加密的四种模式
- 设计模式学习(八)————原型模式
- chrome页面撑开一点位置