国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

設計模式(2)-工廠方法模式

2019-11-08 01:54:35
字體:
來源:轉載
供稿:網友

工廠方法模式

  工廠方法模式屬于創建型的設計模式,把簡單工廠模式中的工廠類,做了進一步的抽象為接口或抽象類,給各個功能創建一個對應的工廠類,然后在這個工廠類里面去創建對應的實例。   優點:滿足開放-封閉原則   缺點:當新增一個功能類,就需要創建對于的工廠類,相比簡單工廠模式,免去了判斷創建那個具體實例,但會創建過多的類,還不如策略模式。

代碼

  此處利用”+”,”-“,”*”,”/”這4個Operation來生成不同的Operation對象來說明工廠方法模式,注意與簡單工廠模式的區別。

C++代碼

  文件構成:   —include   ——Operation.h   ——Add.h   ——Subtraction.h   ——Multiply.h   ——Division.h   ——OperationFactory.h   ——AddFactory.h   ——SubtractionFactory.h   ——MultiplyFactory.h   ——DivisionFactory.h   —src   ——Add.cpp   ——Subtraction.cpp   ——Multiply.cpp   ——Division.cpp   ——AddFactory.cpp   ——SubtractionFactory.cpp   ——MultiplyFactory.cpp   ——DivisionFactory.cpp

  代碼如下:   —include/Operation.h

#ifndef _OPERATION_H_#define _OPERATION_H_class Operation{public: virtual double GetResult(double A, double B)=0;};#endif

  —include/Add.h

#ifndef _ADD_H_#define _ADD_H_#include"Operation.h"class Add:public Operation{public: double GetResult(double A, double B);};#endif

   —include/Subtraction.h

#ifndef _SUBTRACTION_H_#define _SUBTRACTION_H_#include"Operation.h"class Subtraction:public Operation{public: double GetResult(double A, double B);};#endif

   —include/Multiply.h

#ifndef _MULTIPLY_H_#define _MULTIPLY_H_#include"Operation.h"class Multiply:public Operation{public: double GetResult(double A, double B);};#endif

   —include/Division.h

#ifndef _DIVISION_H_#define _DIVISION_H_#include"Operation.h"class Division:public Operation{public: double GetResult(double A, double B);};#endif

  —include/OperationFactory.h

#ifndef _OPERATIONFACTORY_H_#define _OPERATIONFACTORY_H_#include"Operation.h"class OperationFactory{public: virtual Operation* CreateInstance()=0;};#endif

  —include/AddFactory.h

#ifndef _ADDFACTORY_H_#define _ADDFACTORY_H_#include"OperationFactory.h"class AddFactory:public OperationFactory{public: Operation* CreateInstance();};#endif

  —include/SubtractionFactory.h

#ifndef _SUBTRACTIONFACTORY_H_#define _SUBTRACTIONFACTORY_H_#include"OperationFactory.h"class SubtractionFactory:public OperationFactory{public: Operation* CreateInstance();};#endif

  —include/MultiplyFactory.h

#ifndef _MULTIPLYFACTORY_H_#define _MULTIPLYFACTORY_H_#include"OperationFactory.h"class MultiplyFactory:public OperationFactory{public: Operation* CreateInstance();};#endif

  —include/DivisionFactory.h

#ifndef _DIVISIONFACTORY_H_#define _DIVISIONFACTORY_H_#include"OperationFactory.h"class DivisionFactory:public OperationFactory{public: Operation* CreateInstance();};#endif

  —src/Add.cpp

#include"Add.h"double Add::GetResult(double A, double B){ return A+B;}

  —src/Subtraction.cpp

#include"Subtraction.h"double Subtraction::GetResult(double A, double B){ return A-B;}

  —src/Multiply.cpp

#include"Multiply.h"double Multiply::GetResult(double A, double B){ return A*B;}

  —src/Division.cpp

#include"Division.h"double Division::GetResult(double A, double B){ return A-B;}

  —src/AddFactory.cpp

#include"AddFactory.h"#include"Add.h"Operation* AddFactory::CreateInstance(){ return new Add();}

  —src/SubtractionFactory.cpp

#include"SubtractionFactory.h"#include"Subtraction.h"Operation* SubtractionFactory::CreateInstance(){ return new Subtraction();}

  —src/MultiplyFactory.cpp

#include"MultiplyFactory.h"#include"Multiply.h"Operation* MultiplyFactory::CreateInstance(){ return new Multiply();}

  —src/DivisionFactory.cpp

#include<iostream>#include"AddFactory.h"#include"SubtractionFactory.h"#include"MultiplyFactory.h"#include"DivisionFactory.h"using namespace std;int main(){ double value1=10; double value2=2; OperationFactory* addFac=new AddFactory(); Operation* add=addFac->CreateInstance(); OperationFactory* subFac=new SubtractionFactory(); Operation* sub=subFac->CreateInstance(); OperationFactory* mulFac=new MultiplyFactory(); Operation* mul=mulFac->CreateInstance(); OperationFactory* divFac=new DivisionFactory(); Operation* div=divFac->CreateInstance(); cout<<"Add Operation: "<<"value1: "<<value1<<" "<<"value2: "<<value2<<" "<<"ans: "<<add->GetResult(value1,value2)<<endl; cout<<"Subtraction Operation: "<<"value1: "<<value1<<" "<<"value2: "<<value2<<" "<<"ans: "<<sub->GetResult(value1,value2)<<endl; cout<<"Multiply Operation: "<<"value1: "<<value1<<" "<<"value2: "<<value2<<" "<<"ans: "<<mul->GetResult(value1,value2)<<endl; cout<<"Division Operation: "<<"value1: "<<value1<<" "<<"value2: "<<value2<<" "<<"ans: "<<div->GetResult(value1,value2)<<endl; delete add; delete addFac; delete sub; delete subFac; delete mul; delete mulFac; delete div; delete divFac; return 0;}

Python代碼

  文件構成:   —Operation.py   —OperationFactory.py   代碼如下:   —Operation.py

# -*- coding:utf-8 -*-class Operation(): def GetResult(self, A, B): passclass Add(Operation): def GetResult(self, A, B): return A + Bclass Subtraction(Operation): def GetResult(self, A, B): return A - B class Multiply(Operation): def GetResult(self, A, B): return A * Bclass Division(Operation): def GetResult(self, A, B): return A / B

  —OperationFactory.py

# -*- coding:utf-8 -*-from Operation import *class OperationFactory(): def CreateInstance(self): passclass AddFactory(OperationFactory): def CreateInstance(self): return Add()class SubtractionFactory(OperationFactory): def CreateInstance(self): return Subtraction()class MultiplyFactory(OperationFactory): def CreateInstance(self): return Multiply()class DivisionFactory(OperationFactory): def CreateInstance(self): return Division()if "__main__" == __name__: addFac = AddFactory() addOp = addFac.CreateInstance() subFac = SubtractionFactory() subOp = subFac.CreateInstance() mulFac = MultiplyFactory() mulOp = mulFac.CreateInstance() divFac = DivisionFactory() divOp = divFac.CreateInstance() value1 = 10. value2 = 2.
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 象山县| 江华| 犍为县| 凤翔县| 灵山县| 苍梧县| 凤城市| 新野县| 通江县| 论坛| 普洱| 观塘区| 家居| 康定县| 新余市| 孝昌县| 巢湖市| 军事| 芒康县| 石门县| 磴口县| 什邡市| 丰县| 苍溪县| 周至县| 乌拉特前旗| 红河县| 舒兰市| 黑河市| 明光市| 饶阳县| 香港| 方城县| 隆回县| 柳江县| 江阴市| 宣汉县| 保德县| 中阳县| 赞皇县| 咸阳市|