1. 业务说明
为了便于说明,举一个简单的例子。假设现在有一个项目需要建立一个和银行交互的平台,目前只接入工商银行,后续接入其他银行,每个银行的业务都有差异,报文格式可能也不一致。
这里只列举几个简要的流程,仅包括拼报文,发送报文,接收报文,解析报文,其余整体架构以及后续处理等内容省略。
2. 初步设计
创建一个银行交互类 BankOpt,包括四个函数:
int setMsg(); //拼报文
int sendMsg(); //发送报文
int getMsg(); //接收报文
int parseMsg(); //解析报文
然后在每个函数中通过if-else来判断具体是哪一个银行,之后进行相应的处理。
这种设计在刚开发的时候非常方便,代码量少,但是如果后续需要接入另外一个银行时就需要改动BankOpt类,不符合设计模式中的开放-封闭原则。而且单个函数中将来可能会有大量的if-else,使代码可读性下降。
3. 简单工厂模式
通过简单工厂模式,我们可以创建一个专门的工厂类用于实例化一个合适的银行交互类,只需要这个银行交互类具有共同的接口即可。
首先,为了实现更好的复用,把各个银行交互类中相同的部分抽象出来,形成一个银行交互基类,代码如下:
class BaseBank
{
public:
virtual int setMsg() = 0;
virtual int sendMsg() = 0;