设计模式(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))
0 0
原创粉丝点击