最近在学习软件工程.了解了软件从无到有的一个概括性知识!
从最开始的问题定义 ,到需求分析,在到软件架构,在到软件构建,而软件构建中又分为很多的小项,如详细设计,编码,单元测试,系统测试, 还有就是后期的维护.
才发现自己平时开发项目直接从自己的想法开始做是多么的无知.怪不得自己总返工,有时修改量大的我也只能对自己说就这样吧.从这点就可以知道,好的前期工作是多么的重要.
正好最近在学软件工程.又接触到了工厂类,所以今天就写一个简单的实现代码,来介绍一下原理!
其实很简单 ,完全利用了C++的多态性来实现的.
先看一下我写的简单的实现代码
#include
"
iostream
"
using
std::cout;
using
std::endl;

class
base

...
{
int a;
public:
base(int);
virtual void fun();
}
;

void
base
::fun()

...
{
cout<<"the base running!"<<endl;
}




base
::
base
(
int
x)

...
{
a=x;
}

class
body1 :
public
base

...
{
public:
body1(int);
void fun();
}
;

body1::body1(
int
y) :
base
(y)
...
{}

void
body1::fun()

...
{
cout<<"the body1 running!"<<endl;
}





class
body2 :
public
base

...
{
public:
body2(int);
void fun();
}
;


body2::body2(
int
z) :
base
(z)
...
{}

void
body2::fun()

...
{
cout<<"the body2 running!"<<endl;
}





class
factory_base

...
{
public:
virtual base * newptr(int);
}
;

base
*
factory_base::newptr(
int
i)

...
{
return new base(i);
}




class
factory_body1 :
public
factory_base

...
{
public:
virtual base * newptr(int);
}
;

base
*
factory_body1::newptr(
int
i)

...
{
return new body1(i);
}




class
factory_body2 :
public
factory_base

...
{
public:
virtual base * newptr(int);
}
;

base
*
factory_body2::newptr(
int
i)

...
{
return new body2(i);
}




void
user(factory_base
*
ptr)

...
{
base * p=ptr->newptr(0);
p->fun();
}



int
main()

...
{
factory_body1 ob1;
factory_body2 ob2;
user( &ob1 );
user( &ob2 );
return 0;
}
代码量很小,类看起来想先天不良,但主要是为了测试.大家就将就一下.
还是老规矩我希望大家能打开你的VC调试器,跟着汇编代码走一下,来加强你对此技术的理解!
相关的知识在我的一篇"通过汇编角度理解虚函数"文章里.你可以看看它,来加强你对VC生成的汇编代码的理解!
其实实现的方法很简单,就是定义你需要解决问题的一组类.(我们叫使用的类)他们或多或少有一些联系.
在定义工厂类(我们在这里就简单叫它辅助类).类中的主要成员函数就是生成对应使用类的对象.因为使用类的对象是一组,又因为他们具有虚函数.所以我们可以利用多态来得到想要的结果
各个辅助类对相应的使用类产生对应的指向基类的指针.而USER函数就是又是通过多态来把辅助类的具体类型忽略.使得你只要传递一个辅助类对象的指针,就可以在函数中得到指向该辅助类对应的使用类的对象的基类指针.通过它掉用虚函数,大家就很容易理解了.