您的位置:首页 > 其它

Dongle烧写模块重构(一)--最基本的设计,以继承可以组织多个方案商

2014-10-20 14:58 357 查看
一、Dongle烧写模块的需求:

1.框架需要兼容各个方案商,各方案商dongle使用的基本流程是一致的

2.要方便地让各个方案商添加新的功能

3.有很多个方案商,要方便各个新的方案商加入进来,这样的话,就可以使用工厂模式

二、设计演化流程:

如果用继承方式来设计的话,比如



方案商基类:

//设计一个方案商基类,比如方案商会提供scanDongle和getDongleInfo这些接口,然后具体的方案商继承这个基类

class BaseVendor{
public:
BaseVendor();
~BaseVendor();
IScanDongle *iScanDongle;
virtual void scanDongle();
virtual void getDongleInfo();

};



方案商Iflytek:

class VendorIflytek : public BaseVendor{
public:
VendorIflytek();
~VendorIflytek();
void scanDongle();
};


方案商Nanosic:

Class VendornNanosic : public BaseVendor{
VendornNanosic();
~VendornNanosic();
};


VendorIflytek::VendorIflytek(){
LOGE("VendorIflytek::VendorIflytek");
}
VendorIflytek::~VendorIflytek(){
LOGE("VendorIflytek::~VendorIflytek");
}
void VendorIflytek::scanDongle(){
LOGE("VendorIflytek::scanDongle");
iScanDongle = new ScanDonglebyBluetooth();
iScanDongle->scanDongle();
}


测试一下:

//create a vendor
BaseVendor *vendor = new VendorIflytek();
//excute a vendor behavior
vendor->scanDongle();


结果:



会发现:如果采用派生类继承的方式来实现的话,每一个派生类都必须小心检查哪些类是需要覆盖的,比如方案商Nanosic加入的时候,没有覆盖掉getDongleInfo这个函数,就会采用基类的实现,而这不一定是新加入的方案商所希望的。所以这里还需要做其他处理
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐