天天看點

設計模式(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,在下面的曆程中會逐一講到。

繼續閱讀