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

最近在学习软件工程.了解了软件从无到有的一个概括性知识!

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

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

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

其实很简单 ,完全利用了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函数就是又是通过多态来把辅助类的具体类型忽略.使得你只要传递一个辅助类对象的指针,就可以在函数中得到指向该辅助类对应的使用类的对象的基类指针.通过它掉用虚函数,大家就很容易理解了.

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值