设计模式(1)-简单工厂模式
来源:互联网 发布:怎么样提升淘宝销量 编辑:程序博客网 时间:2024/04/30 09:48
简单工厂模式
简单工厂模式属于创建型的设计模式,其特点是使用一个工厂生产所有的类对象,通过在工厂类中进行判断,然后创建需要的功能类。
优点:不必使用具体的功能类去创建该类的实例。
缺点:新增一个功能类就需要在工厂类中增加一个判断。
代码
此处利用”+”,”-“,”*”,”/”这4个Operation来生成不同的Operation对象来说明简单工厂模式。
C++代码
文件构成:
—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{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"Add.h"#include"Subtraction.h"#include"Multiply.h"#include"Division.h"class OperationFactory{public: static Operation* CreateOperation(char opertionType);};#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/OperationFactory.cpp
#include<iostream>#include"OperationFactory.h"using namespace std;Operation* OperationFactory::CreateOperation(char operationType){ Operation* op=NULL; switch(operationType) { case '+': op=new Add(); break; case '-': op=new Subtraction(); break; case '*': op=new Multiply(); break; case '/': op=new Division(); break; default: break; } return op;}
—src/main.cpp
#include<iostream>#include"OperationFactory.h"#include"Operation.h"using namespace std;int main(){ double value1=8; double value2=2; Operation *addOperator=OperationFactory::CreateOperation('+'); Operation *subOperator=OperationFactory::CreateOperation('-'); Operation *mulOperator=OperationFactory::CreateOperation('*'); Operation *divOperator=OperationFactory::CreateOperation('/'); cout<<"Add Operation: "<<value1<<" "<<value2<<" "<<addOperator->GetResult(value1,value2)<<endl; cout<<"Subtraction Operation: "<<value1<<" "<<value2<<" "<<subOperator->GetResult(value1,value2)<<endl; cout<<"Multiply Operation: "<<value1<<" "<<value2<<" "<<mulOperator->GetResult(value1,value2)<<endl; cout<<"Division Operation: "<<value1<<" "<<value2<<" "<<divOperator->GetResult(value1,value2)<<endl; delete addOperator; delete subOperator; delete mulOperator; delete divOperator; 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-Bclass 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: @staticmethod def CreateOperation(operationType): if operationType == "+": return Add() elif operationType == "-": return Subtraction() elif operationType == "*": return Multiply() elif operationType == "/": return Division() else: return Noneif "__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:简单工厂
- 设计模式 1----------简单工厂
- Java设计模式-工厂模式(1)简单工厂模式
- NET设计模式(1): 简单工厂模式
- .NET设计模式(1): 简单工厂模式
- NET设计模式(1): 简单工厂模式
- .NET设计模式(1): 简单工厂模式
- 设计模式(一)--简单工厂模式(1)
- .NET设计模式(1): 简单工厂模式
- .NET设计模式(1): 简单工厂模式
- .NET设计模式(1): 简单工厂模式
- .NET设计模式(1): 简单工厂模式
- .NET设计模式(1) - 简单工厂模式
- 设计模式1--简单工厂模式
- 设计模式1: 简单工厂模式
- 设计模式 1-简单工厂模式
- 深入学习VMware vSphere---安装vCenter
- Java8内存模型—永久代(PermGen)和元空间(Metaspace)
- Hadoop Erasure Coding结构分析
- qt creator项目中添加文件夹
- Linux的分区类型
- 设计模式(1)-简单工厂模式
- 深入理解Java面向对象三大特性 封装 继承 多态
- LeetCode-29. Divide Two Integers
- CentOS安装jdk的三种方法
- java多线程
- ListView复用和优化详解
- Mac中使用MATLAB进行simulink代码生成
- DPDK_API_rte_malloc源码分析-16.11
- Override和Overload的含义去区