阿里巴巴2016校园招聘在线笔试(C/C++)附加题 第二题

本文探讨了一种设计方法,通过多态性实现程序间的通用数据转换,显著提高了扩展性和维护性。该方法减少了函数数量,简化了修改流程,适用于新增角色或调整读写方式时的应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

题目描述:

假设目前有3个程序A, B和C,需要相互传输数据,我们需要给做一个中转程序P。
A 读写的数据是经过某压缩格式azip压缩过的。
B 读写的数据需要base64编码。
C 读写数据需要压缩格式bzip压缩后base64编码。


现在假设已有工具函数 :

std::string azip(const std::string& input);
std::string aunzip(const std::string& input);
std::string base64encode(const std::string& input);
std::string base64decode(const std::string& input);
bool bzip(const std::string& input, std::string* output);
bool bunzip(const std::string& input, std::string* output);

请给中转程序P设计格式转换的工具类。注意设计的通用性,比如:可能有新的角色加入,要求给做加密解密等。



参考思路:笔试期间,直接设计了6个函数来实现3个程序之间的相互转换。按照这种方式,如果现在加入新的角色D进来,那么要再设计6个函数。假设现在有n个程序,已经用f(n) = n*(n-1)个函数实现了它们之间的相互转换,f(n) - f(n-1) = n*(n-1) - (n-1)*(n-2) = 2n-2, 也就是增加一个程序就要再设计2n-2这么多个函数。另外如果修改了一个程序的读写方式,那么就需要修改2n-2个函数。所以这种设计方式可扩展性和维护性不好。

           通过思考,可以发现用多态的方式来解决这个问题,对每个程序设计出它的加解密函数,只需要设计一个转换函数,需要转换的两个程序设计作为参数,具体代码如下:


   

如果现在添加一个角色D,那么只需要添加一个类taskD,包括两个成员函数in和out,即每添加一个角色,只需要添加一个类(两个函数)。如果修改了一个角色的读写方式,也只需要修改该类的两个函数,其它地方不变。所以该设计方法相对上面的那个具有更好的扩展性和维护性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值