C++设计模式之工厂模式
2016-04-21 22:09
399 查看
简介
在实际项目中,工厂模式是用的比较多的, 这篇文章也主要是通过具体的简单的C++的一个实例来解释工厂模式。效果图
项目整体文件
生产出一个鸭子的实例
生产出一只鸡的实例
主要代码
//chichen相关代码#ifndef CHICHEN_H #define CHICHEN_H #include "homestorage.h" class chichen : public HomeStorage { public: chichen(); void crow(); void feed(); void sleep(); }; #endif // CHICHEN_H //chichen.cpp #include "chichen.h" chichen::chichen() { } void chichen::crow() { cout << "void chichen::crow()" << endl; } void chichen::feed() { cout << "void chichen::feed()" << endl; } void chichen::sleep() { cout << "void chichen::sleep()" << endl; }
duck文件相关代码:
#ifndef DUCK_H #define DUCK_H #include "homestorage.h" class duck : public HomeStorage { public: duck(); void crow(); void feed(); void sleep(); }; #endif // DUCK_H //duck.cpp #include "duck.h" duck::duck() { } void duck::crow() { cout << "void duck::crow()" << endl; } void duck::feed() { cout << "void duck::feed()" << endl; } void duck::sleep() { cout << "void duck::sleep()" << endl; }
//farmers
#ifndef FARMERS_H #define FARMERS_H #include "homestorage.h" #include "duck.h" #include "chichen.h" class Farmers { public: enum HomeStorageType { CHICHEN = 0, DUCK }; Farmers(); HomeStorage* getHomeStorage(int type); private: HomeStorage *m_homestorage; }; #endif // FARMERS_H #include "farmers.h" Farmers::Farmers() :m_homestorage(NULL) { } HomeStorage* Farmers::getHomeStorage(int type) { if(!m_homestorage) { delete m_homestorage; m_homestorage = NULL; } if(type == CHICHEN) { m_homestorage = new chichen(); } else if (type == DUCK) { m_homestorage = new duck(); } return m_homestorage; }
homestorage相关
#ifndef HOMESTORAGE_H #define HOMESTORAGE_H #include <stdio.h> #include <iostream> using namespace::std; class HomeStorage { public: HomeStorage(); virtual void crow() = 0; virtual void feed() = 0; virtual void sleep() = 0; }; #endif // HOMESTORAGE_H #include "homestorage.h" HomeStorage::HomeStorage() { }
main函数
#include <QCoreApplication> #include "farmers.h" #include "homestorage.h" int main(int argc, char *argv[]) { QCoreApplication a(argc, argv); Farmers LiRuiDong; HomeStorage *homeStorage = LiRuiDong.getHomeStorage(Farmers::CHICHEN); homeStorage->crow(); homeStorage->feed(); homeStorage->sleep(); return a.exec(); }
主要代码解析
在这个实例中, 有一个家蓄的类HomeStorage, 它用纯虚函数virtual void crow() = 0; virtual void feed() = 0; virtual void sleep() = 0;
用来描述进食, 睡觉 和 发音。 后面的每种动物继承于它,并要求一定需要重写, 因为纯虚函数的原因。
而Farmers 类的getHomeStorage用来获取是哪种家蓄。 在这里用到了多肽, 可以发现,有很多种设计模式都用到了多肽, 实现把子类对象向上转型为父类对象。
所以针对工厂模式的要点在于把每种相关的,各自创建自对应的类, 它们再抽象出一个父类, 客户端通过类型码来获取,对应的内容。
相关文章推荐
- Leetcode 6. ZigZag Conversion
- C++ public protected private成员访问权限解读
- const修饰的函数
- PCANet的C++代码——详细注释版
- c++第4次作业
- C++流操作算子
- 消失的字符串——c语言函数中的数据存储方式以及字符串实现
- 关于C语言的问卷调查
- Android NDK开发C语言部分的单步跟踪
- 第四周作业——C语言自评
- C语言
- C++ Greedy Snake的OOP实现 贪食蛇 <list> STL初次学习
- 两人合作审阅C++装饰模式
- 二叉排序树的C++实现,包括难点删除
- C语言贪食蛇
- 2016年4月21日 21:18:25 我的第一篇博客~
- effective C++ 读书笔记 条款08
- c和c++栈
- c++map基本操作
- 如何使用VC++6.0发布程序(即release版本程序)