簡單工廠模式屬於建立型的設計模式,其特點是使用乙個工廠生產所有的類物件,通過在工廠類中進行判斷,然後建立需要的功能類。
優點:不必使用具體的功能類去建立該類的例項。
缺點:新增乙個功能類就需要在工廠類中增加乙個判斷。
此處利用」+」,」-「,」*」,」/」這4個operation來生成不同的operation物件來說明簡單工廠模式。
檔案構成:
—include
——operation.h
——add.h
——subtraction.h
——multiply.h
——division.h
——operationfactory.h
—src
——add.cpp
——subtraction.cpp
——multiply.cpp
——division.cpp
——operationfactory.cpp
——main.cpp
**如下:
—include/operation.h
#ifndef _operation_h_
#define _operation_h_
class operation
;#endif
—include/add.h
#ifndef _add_h_
#define _add_h_
#include"operation.h"
class add:public operation
;#endif
—include/subtraction.h
#ifndef _subtraction_h_
#define _subtraction_h_
#include"operation.h"
class subtraction:public operation
;#endif
—include/multiply.h
#ifndef _multiply_h_
#define _multiply_h_
#include"operation.h"
class multiply:public operation
;#endif
—include/division.h
#ifndef _division_h_
#define _division_h_
#include"operation.h"
class division:public operation
;#endif
—include/operationfactory.h
#ifndef _operationfactory_h_
#define _operationfactory_h_
#include"add.h"
#include"subtraction.h"
#include"multiply.h"
#include"division.h"
class
operationfactory
;#endif
—src/add.cpp
#include"add.h"
double add::getresult(double a, double b)
—src/subtraction.cpp
#include"subtraction.h"
double subtraction::getresult(double a, double b)
—src/multiply.cpp
#include"multiply.h"
double multiply::getresult(double a, double b)
—src/division.cpp
#include"division.h"
double division::getresult(double a, double b)
—src/operationfactory.cpp
#include
#include"operationfactory.h"
using
namespace
std;
operation* operationfactory::createoperation(char operationtype)
return op;
}
—src/main.cpp
#include
#include"operationfactory.h"
#include"operation.h"
using
namespace
std;
int main()
檔案構成:
—operation.py
—operationfactory.py
**如下:
—operation.py
#-*- coding:utf-8 -*-
class
operation:
defgetresult
(self, a, b):
pass
class
add(operation):
defgetresult
(self, a, b):
return a+b
class
subtraction
(operation):
defgetresult
(self, a, b):
return a-b
class
multiply
(operation):
defgetresult
(self, a, b):
return a*b
class
division
(operation):
defgetresult
(self, a, b):
return a/b
—operationfactory.py
# -*- coding:utf-8 -*-
from operation import *
class
operationfactory:
@staticmethod
defcreateoperation
(operationtype):
if operationtype == "+":
return add()
elif operationtype == "-":
return subtraction()
elif operationtype == "*":
return multiply()
elif operationtype == "/":
return division()
else:
return
none
if"__main__" == __name__:
addop = operationfactory.createoperation("+")
subop = operationfactory.createoperation("-")
mulop = operationfactory.createoperation("*")
divop = operationfactory.createoperation("/")
value1 = 8.
value2 = 2.
print
"add operation value1: %f value2: %f ans: %f" %(value1,value2,addop.getresult(value1, value2))
print
"subtraction operation value1: %f value2: %f ans: %f" %(value1,value2,subop.getresult(value1, value2))
print
"multiply operation value1: %f value2: %f ans: %f" %(value1,value2,mulop.getresult(value1, value2))
print
"division operation value1: %f value2: %f ans: %f" %(value1,value2,divop.getresult(value1, value2))
設計模式 1 簡單工廠模式
總結簡單工廠設計模式就是為了能夠根據不同情況動態獲取到需要的型別 在本次將會演示乙個計算器的功能 我們無法知道使用者在程式中會輸入哪些字元,是 或者其他,但是我們能確定的是使用者需要通過輸入將兩個值進行運算,得到乙個返回結果。那麼在此處我們就可以建立乙個演算法基類,有設定值並計算後返回值的方法,值1...
設計模式(1) 簡單工廠模式
例項化物件的時候不再使用 new object 形式,可以根據使用者的選擇條件來例項化相關的類。對於客戶端來說,去除了具體的類的依賴。只需要給出具體例項的描述給工廠,工廠就會自動返回具體的例項物件。todo classname operation description 運算類 public cla...
設計模式1 簡單工廠模式
1 規範性 命名規範 邏輯強 無明顯bug 無冗餘判斷 eg 多個並列if用else if或switch case替代 2 物件導向 易維護 可復用 可擴充套件 靈活性好 3 物件導向三大特性 封裝 繼承 多型,合理使用將顯著降低程式的耦合度 4 封裝 業務邏輯 eg 計算器的計算功能 和介面邏輯 ...