天天看点

设计模式(1)-使用简单工厂优化代码

首先看一段程序,目的是完成一个计算器的计算,

面向过程的写法

这样出来的程序每次都需要修改,比如我要添加一个取平方根的操作,需要修改程序,如果在增加,还是继续修改。

面向对象和面向过程的对比就不用多说了吧,借用书上的一句话

通过继承封装和多态把程序的耦合度降低,使用设计模式使程序更灵活更加容易复用。

第一步 剥离业务,现在程序都是混在一起的,将业务剥离出来

创建类Operaton

修改main函数

这样实现了业务逻辑的分离,但是还是没解决刚才的问题,如果再添加操作或业务还需要再修改业务类文件。

第二步 使用简单工厂

工厂模式专门负责将大量有共同接口的类实例化。工厂模式可以动态决定将哪一个类实例化,不必事先知道每次要实例化哪一个类。

 看一下类图的描述

设计模式(1)-使用简单工厂优化代码

从而得到的几个文件Operaton.cpp,Operaton.h,OperatonAdd.cpp,OperatonAdd.h,OperatonSub.cpp,OperatonSub.h,OperatonMul.cpp,OperatonMul.h,OperatonDiv.cpp,OperatonDiv.h

Operaton.h

class Operaton

{

public:

 Operaton();

 virtual ~Operaton();

 int numA;

 int numB;

 virtual int getResult() = 0;

};

 Operaton.cpp

#include "stdafx.h"

#include "Operaton.h"

Operaton::Operaton(){

}

Operaton::~Operaton(){

OperatonAdd.h

 OperatonAdd.cpp

 OperatonSub.h

OperatonSub.cpp

 OperatonMul.h

OperatonMul.cpp

 OperatonDiv.h

OperatonDiv.cpp

OperatonFactory.h

OperatonFactory.cpp

在这里操作返回的对象,将业务分的更细致,main的代码可改为

这样,如果继续增加比如求平方,取余就可以不修改main中的内容了。当然现在还没有完全移除if和switch,在下面的历程中会逐一讲到。

继续阅读