设计模式学习--工厂方法模式
来源:互联网 发布:如何解除公司网络限制 编辑:程序博客网 时间:2024/06/11 01:27
工厂方法模式,定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到了其子类。
之前的简单工厂模式虽说也非常好,但是在添加和更改生产选项的时候,不得不更改switch和case语句,这点违背了设计模式的开方--封闭的原则。
工厂方法模式,既克服了简单工厂违背开方--封闭原则的缺点,又保持了封装对象创建过程的优点。
两种模式都是集中封装了对象的创建,使得要更换对象时,不需要做出大的改动就可以实现,降低了客户程序和产品对象的耦合。工厂方法模式是简单工厂模式的进一步抽象和推广。由于使用了多态性,工厂方法模式保持了简单工厂模式的有点,而且克服了它的缺点。但缺点是由于每加一个产品,就需要加一个产品工厂的类,增加了额外的开发量。
#include <iostream>#include <string>using namespace std;class LeiFeng//雷锋类{public:void Sweep()//扫地{cout<<"扫地"<<endl;}void Wash()//洗衣{cout<<"洗衣"<<endl;}void Cook()//煮饭{cout<<"煮饭"<<endl;}};class Undergraduate : public LeiFeng//大学生类 继承于雷锋类 {};class Volunteer : public LeiFeng//志愿者类 继承于雷锋类{};/* class SimpleFactory//简单工厂方法{LeiFeng* leifeng;public:LeiFeng* createLeifeng(string type){if(type == "学雷锋的大学生"){leifeng = new Undergraduate;}else if(type == "社区志愿者"){leifeng = new Volunteer;}return leifeng;}}; */class Factory//工厂方法 工厂基类 {public:virtual LeiFeng* createLeifeng(){}//创建雷锋实例的虚函数};class UndergraduateFactory : public Factory//大学生雷锋 工厂类{public:LeiFeng* createLeifeng()//创建大学生雷锋{return (new Undergraduate);}};class VolunteerFactory : public Factory//志愿者雷锋 工厂类{public:LeiFeng* createLeifeng()//创建志愿者雷锋{return (new Volunteer);}};int main(){/* SimpleFactory S;LeiFeng* student1 = S.createLeifeng("学雷锋的大学生");student1->Sweep();LeiFeng* student2 = S.createLeifeng("学雷锋的大学生");student2->Wash();LeiFeng* student3 = S.createLeifeng("学雷锋的大学生");student3->Cook(); */Factory* factory = new UndergraduateFactory;//工厂基类指针 指向 大学生雷锋工厂类LeiFeng* student1 = factory->createLeifeng();//工厂基类指针 访问 大学生雷锋工厂类 createLeifeng函数LeiFeng* student2 = factory->createLeifeng();//工厂基类指针 访问 大学生雷锋工厂类 createLeifeng函数LeiFeng* student3 = factory->createLeifeng();//工厂基类指针 访问 大学生雷锋工厂类 createLeifeng函数student1->Sweep();//大学生雷锋类对象 访问 雷锋类函数student2->Wash();//大学生雷锋类对象 访问 雷锋类函数student3->Cook();//大学生雷锋类对象 访问 雷锋类函数return 0;}
0 0
- 学习设计模式-方法工厂设计模式
- 设计模式学习--工厂方法
- 设计模式入门学习之工厂模式(工厂方法模式)
- 设计模式入门学习之工厂模式(工厂方法模式)
- 设计模式学习--工厂方法模式
- 设计模式学习----工厂方法模式
- 设计模式 学习之工厂方法模式
- 【设计模式】工厂方法模式学习笔记
- 设计模式学习--工厂方法模式
- 设计模式学习-----工厂方法模式
- 设计模式学习笔记-工厂方法模式
- 设计模式学习—工厂方法模式
- 设计模式学习之---工厂方法模式
- 设计模式学习笔记--工厂方法模式
- 设计模式学习--工厂方法模式
- 设计模式学习笔记-工厂方法模式
- 设计模式学习--工厂方法模式
- 设计模式学习1-工厂方法模式
- (详解)Java equals方法与==的区别和联系
- JDBC连接Oracle 12c错误ORA-28040: No matching authentication protocol
- 软件测试工程师面试一般常见问题汇总
- PAT basic 1002
- hdu 2553 N皇后问题(回溯算法)
- 设计模式学习--工厂方法模式
- 如何下载GitHub上的源代码
- jQuery模板插件--jQuery tmpl初识
- 七、java实现定时任务的三种方式
- 欢迎使用CSDN-markdown编辑器
- 小程序中 that和this用法
- linux下安装npm
- 最小生成树(Prim算法)加标记前驱的第二种方法
- LinkedHashMap源码分析