首先看一段程序,目的是完成一个计算器的计算,
面向过程的写法
这样出来的程序每次都需要修改,比如我要添加一个取平方根的操作,需要修改程序,如果在增加,还是继续修改。
面向对象和面向过程的对比就不用多说了吧,借用书上的一句话
通过继承封装和多态把程序的耦合度降低,使用设计模式使程序更灵活更加容易复用。
第一步 剥离业务,现在程序都是混在一起的,将业务剥离出来
创建类Operaton
修改main函数
这样实现了业务逻辑的分离,但是还是没解决刚才的问题,如果再添加操作或业务还需要再修改业务类文件。
第二步 使用简单工厂
工厂模式专门负责将大量有共同接口的类实例化。工厂模式可以动态决定将哪一个类实例化,不必事先知道每次要实例化哪一个类。
看一下类图的描述
![](https://img.laitimes.com/img/_0nNw4CM6IyYiwiM6ICdiwiInBnauYzYjdTO5UDZmJDMwYzMwImM0gTO2kjYhVWM4Y2YiRGMfdWbp9CXt92Yu4GZjlGbh5SZslmZxl3Lc9CX6MHc0RHaiojIsJye.jpg)
从而得到的几个文件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,在下面的历程中会逐一讲到。