您的位置:首页 > 其它

深入浅出理解设计模式中的工厂类--虚构造函数!

2007-07-14 04:24 267 查看
最近在学习软件工程.了解了软件从无到有的一个概括性知识!

从最开始的问题定义 ,到需求分析,在到软件架构,在到软件构建,而软件构建中又分为很多的小项,如详细设计,编码,单元测试,系统测试, 还有就是后期的维护.

才发现自己平时开发项目直接从自己的想法开始做是多么的无知.怪不得自己总返工,有时修改量大的我也只能对自己说就这样吧.从这点就可以知道,好的前期工作是多么的重要.

正好最近在学软件工程.又接触到了工厂类,所以今天就写一个简单的实现代码,来介绍一下原理!

其实很简单 ,完全利用了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函数就是又是通过多态来把辅助类的具体类型忽略.使得你只要传递一个辅助类对象的指针,就可以在函数中得到指向该辅助类对应的使用类的对象的基类指针.通过它掉用虚函数,大家就很容易理解了.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐