- UID
- 112419
- 在线时间
- 0 小时
- 最后登录
- 2017-8-30
- 注册时间
- 2012-5-21
- 宅魂
- 246 点
- 贡献
- 22 点
- 宅币
- 5120 枚
- 宅の石(入宅度)
- 0 块
- 元气(技能点)
- 5 点
- 活跃
- 0 ℃
- 听众
- 7
- 收听
- 0
该用户从未签到
序章
- 积分
- 6174
|
楼主 |
发表于 2013-10-27 10:55:25
|
显示全部楼层
本帖最后由 dxxds 于 2013-10-28 21:56 编辑
作为一个近几个月不咋上网不咋看电视不咋读报纸甚至连小说都断了的不知道虔不虔诚的IT男来说,我
的行迹已经完全说明了一个问题 —— 那就是忙,啊,那就是忙。
每天都有加班,倒是也不是很晚,8,9点吧,但是一个小时回家后,也就,9,10点了,再吃个饭,撸个
管,也就可以去睡了。
像我这种没有在自己是学生时期,长相甜美的时候还没有找个女朋友,就毅然决定寻找梦想,远走他乡
,要一手扛起生活,一手扛起性生活的人,的确是很苦闷的。
我现在会尽可能的让自己的帖子更的快一点,虽然没啥人跟吧。
个人感觉,设计模式里很重要又很常用的,可能是单例模式,概念简短易懂的,可能是观察者模式,所
以我们今天就来聊聊,工厂模式。
工厂模式算是大多设计模式中的标准 hello world 开场了
还是从它开始
#include<iostream>
using namespace std;
int main()
{
return 0;
}
鉴于之前的策略模式和代理模式,都很适合与工厂模式结合。
所以我就打算,不用它们,直接用最简短的代码直接赤果果的讲解工厂。
绝对是简短的,要相信我,不用最精髓的意思来讲解代码,我都不好意思说我曾经的志向就是想当教授
啊。啊,错了,是老师
现在放出这节课最重要的代码,然后后面的长代码都是围绕这个逻辑进行包装的。
int* create_int(const int a = 2) // 造一个符合你的吉利的数字,默认是二
{
return new int(a);
}
int main()
{
int* pa = NULL; //首先,来个指针
pa = create_int(); //然后,调用工厂方法,不填参数的话,你就是二。
cout<< *pa <<endl; //之后,看看工厂造了个啥,目前造了个二
delete pa; //最后,过河拆桥
system("pause");
return 0;
}
这个造二的逻辑,就是工厂模式中的最主要功能了
看一下要用到的类
I_unit // 单位,主接口
C_tank // 坦克 继承 I_unit
C_plane // 飞机 继承 I_unit
I_factory // 工厂,主接口
C_factory_tank // 造坦克的工厂 继承 I_factory
C_factory_plane // 造飞机的工厂 继承 I_factory
预习到此为止,现在我们来玩真的,上代码
#include <iostream>
#include <cstdlib>
using namespace std;
class I_unit
{
public:
virtual ~I_unit(){} // 虚析构,这样子类可以调用自己的析构来结束自己的
一生
virtual void who_am_i() = 0;
};
class C_tank : public I_unit
{
public:
void who_am_i()
{
cout<<"我是舒克"<<endl;
}
};
class C_plane : public I_unit
{
public:
void who_am_i()
{
cout<<"我是贝塔"<<endl;
}
};
// 以上是产品 以下是工厂 虽然不是第一次发 但我不会割
class I_factory
{
public:
virtual ~I_factory(){}
virtual I_unit* create_unit() = 0;
};
class C_factory_tank : public I_factory
{
public:
I_unit* create_unit()
{
return new C_tank;
}
};
class C_factory_plane : public I_factory
{
public:
I_unit* create_unit()
{
return new C_plane;
}
};
// 以上是所有类 以下是调用
void build_tanks()
{
I_factory* tank_factory = NULL; // 一个工厂
I_unit* tank = NULL; // 一个产品
tank_factory = new C_factory_tank;
tank = tank_factory->create_unit();
tank->who_am_i(); // 不出意外的话,这货应该是坦克
delete tank;
delete tank_factory;
}
void build_planes()
{
I_factory* plane_factory = NULL; // 一个工厂
I_unit* plane = NULL; // 一个产品
plane_factory = new C_factory_plane;
plane = plane_factory->create_unit();
plane->who_am_i(); // 不出意外的话,这货应该是灰机
delete plane;
delete plane_factory;
}
// 以上为全部准备工作,以下正式耍
int main()
{
build_tanks();
build_planes();
system("pause");
return 0;
}
就这样,我忙了 |
|