用C++学习设计模式之 简单工厂模式

</pre>拿到了《大话设计模式》这本书,从这本书的风格来看,感觉这本书还是非常适合大学教育的。但是对于初学者来讲,C#是不太容易接受的。为了解决这个问题,同时为了提升自己的C++水平以及加深对面向对象的理解,笔者决定用C++学习一下这本书。<p></p><p><span style="white-space: pre;">运算类头文件</span></p><p><span style="white-space: pre;"></span></p><pre name="code" class="cpp">#ifndef OPERATION_H
#define OPERATION_H

class Operation
{
    public:
        Operation();
        virtual ~Operation();
        void set_numberA(double _numberA);
        void set_numberB(double _numberB);
        double get_numberA();
        double get_numberB();
        double virtual  get_result();
    protected:
        double numberA;
        double numberB;
    private:
};

#endif // OPERATION_H

运算类.cpp文件

#include "Operation.h"

Operation::Operation()
{
    //ctor
    numberA = 0;
    numberB = 0;
}

Operation::~Operation()
{
    //dtor
}

void Operation::set_numberA(double _numberA){
    numberA = _numberA;
}
void Operation::set_numberB(double _numberB){
    numberB = _numberB;
}

double Operation::get_numberA(){
    return this->numberA;
}
double Operation::get_numberB(){
    return this->numberB;
}
double   Operation::get_result(){
    return 0.0;
}

然后是+、-、*、/四个类分别继承运算类

#ifndef OPERATIONADD_H
#define OPERATIONADD_H
#include"Operation.h"

class OperationAdd:public Operation
{
    public:
        double get_result();
    protected:
    private:
};

#endif // OPERATIONADD_H
#include "OperationAdd.h"

double OperationAdd::get_result(){
    double result = 0;
    result = numberA + numberB;
    return result;
}
#ifndef OPERATIONSUB_H
#define OPERATIONSUB_H
#include"Operation.h"

class OperationSub:public Operation
{
    public:
        double get_result();
    protected:
    private:
};

#endif // OPERATIONSUB_H
#include "OperationSub.h"

double OperationSub::get_result(){
    double result = 0;
    result = numberA - numberB;
    return result;
}
#ifndef OPERATIONMUL_H
#define OPERATIONMUL_H
#include"Operation.h"

class OperationMul:public Operation
{
    public:
        double get_result();
    protected:
    private:
};

#endif // OPERATIONMUL_H
#include "OperationMul.h"

double OperationMul::get_result(){
    double result = 0;
    result = numberA*numberB;
    return result;
}

#ifndef OPERATIONDIV_H
#define OPERATIONDIV_H
#include"Operation.h"

class OperationDiv:public Operation
{
    public:
        double get_result();
    protected:
    private:
};

#endif // OPERATIONDIV_H
#include "OperationDiv.h"

double OperationDiv::get_result(){
    double result = 0;
    result = numberA/numberB;
    return result;
}

然后是一个工厂类

#ifndef OPERATIONFACTORY_H
#define OPERATIONFACTORY_H
#include"Operation.h"
#include"OperationAdd.h"
#include"OperationSub.h"
#include"OperationMul.h"
#include"OperationDiv.h"

class OperationFactory
{
    public:
        static Operation *CreateOperation(char ch);
        OperationFactory();
        virtual ~OperationFactory();
    protected:
    private:
};

#endif // OPERATIONFACTORY_H
#include "OperationFactory.h"

OperationFactory::OperationFactory()
{
    //ctor
}

OperationFactory::~OperationFactory()
{
    //dtor
}
Operation *OperationFactory::CreateOperation(char ch){
    Operation *oper;
    switch(ch){
    case '+':
        oper = new OperationAdd();
        break;
    case '-':
        oper = new OperationSub();
        break;
    case '*':
        oper = new OperationMul();
        break;
    case '/':
        oper = new OperationDiv();
        break;

    }
    return oper;
}

最后是主类

#include <iostream>
#include"Operation.h"
#include"OperationAdd.h"
#include"OperationSub.h"
#include"OperationMul.h"
#include"OperationDiv.h"
#include"OperationFactory.h"
using namespace std;

int main()
{
    Operation* oper;
    oper = OperationFactory::CreateOperation('*');
    oper->set_numberA(1);
    oper->set_numberB(2);
    cout<<oper->get_result();
    return 0;
}
时间: 2024-10-28 10:40:18

用C++学习设计模式之 简单工厂模式的相关文章

学习大话设计模式01_简单工厂模式(简易计算器)

1 /** 2 * 面向对象(运算类) 3 * 简易计算器 4 * @author Monica 5 * 6 */ 7 public class Operation { 8 private double numberA = 0; 9 private double numberB = 0; 10 11 //虚函数 12 public double GetResult() { 13 double result = 0; 14 return result; 15 } 16 17 public doub

【幻化万千戏红尘】qianfengDay10-java基础学习:成员内部类、静态内部类、局部和匿名内部类,设计模式之简单工厂模式

课程回顾: 接口:1.属性:public\static\final2.方法:public\abstract 多态:1.静态化(编译时)多态重载2.动态化(运行时)多态重写对象转型 1.向上转型 2.向下转型 今日内容:内部类:定义在类的内部的类1.成员内部类格式:[修饰符] class 类名 { }内部不能有静态的属性和方法,可以访问外部类的属性,也可以调用外部类的方法 在静态方法中的使用格式:外部类 外对象=new 外部类();成员内部类 对象名=外对象.new 成员内部类(); 2.静态内部

iOS设计模式 - (3)简单工厂模式

iOS设计模式 - (3)简单工厂模式           by Colin丶 转载请注明出处:              http://blog.csdn.net/hitwhylz/article/details/40381721 一.简述 简单工厂模式(FACTORY),通过面向对象的封装,继承和多态来降低程序的耦合度.将一个具体类的实例化交给一个静态工厂方法来执行. 该模式中的角色包括: 工厂类(Simple Factory): 只包含了创建具体类的静态方法. 抽象产品(Product):

设计模式初探——简单工厂模式

学习设计模式已经有一段时间了,<大话>也正看第二遍,可是却迟迟不敢下笔.算了,先拿简单的开刀吧. 简单工厂模式是设计模式中一种比较简单.基础的设计模式. 定义: 由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例. 包含元素: 工厂(Creator)角色 简单工厂模式的核心,它负责实现创建所有实例的内部逻辑.工厂类可以被外界直接调用,创建所需的产品对象. 抽象产品(Product)角色 简单工厂模式所创建的所有对象的父类,它负责描述所有实例所共有的

01.设计模式_简单工厂模式

转载自  http://www.cnblogs.com/zhili/p/SimpleFactory.html 一.引言 这个系列也是自己对设计模式的一些学习笔记,希望对一些初学设计模式的人有所帮助的,在上一个专题中介绍了单例模式,在这个专题中继续为大家介绍一个比较容易理解的模式--简单工厂模式. 二.简单工厂模式的介绍 说到简单工厂,自然的第一个疑问当然就是什么是简单工厂模式了? 在现实生活中工厂是负责生产产品的,同样在设计模式中,简单工厂模式我们也可以理解为负责生产对象的一个类, 我们平常编程

C#设计模式(2)——简单工厂模式

一.引言 这个系列也是自己对设计模式的一些学习笔记,希望对一些初学设计模式的人有所帮助的,在上一个专题中介绍了单例模式,在这个专题中继续为大家介绍一个比较容易理解的模式——简单工厂模式. 二.简单工厂模式的介绍 说到简单工厂,自然的第一个疑问当然就是什么是简单工厂模式了? 在现实生活中工厂是负责生产产品的,同样在设计模式中,简单工厂模式我们也可以理解为负责生产对象的一个类, 我们平常编程中,当使用”new”关键字创建一个对象时,此时该类就依赖与这个对象,也就是他们之间的耦合度高,当需求变化时,我

【设计模式】简单工厂模式

以面向对象的思想和简单工厂模式,写一个C++计算器程序,代码如下: #include <iostream> using namespace std; class Operation { public: Operation(double left, double right) { lhs = left; rhs = right; } const double GetLeft() const { return lhs; } const double GetRight() const { retur

设计模式之简单工厂模式

设计模式之简单工厂模式 动机:         不暴露实例化逻辑来创建对象.通过公共的接口创建新的对象.         这是一个简单的实现,客户端需要一个product,但是client不直接使用new对象,而是通过提供需要的对象信息来找factory得到新的product.         这个factory实例化一个具体的product并返回(转化成抽象的类),client段使用这个抽象的类而不用考虑它具体的实现. 应用举例:        也许工厂模式是使用最多的模式之一.举个例子,一个

设计模式初探—简单工厂模式

为什么要学习设计模式? 可重用.可维护.可扩展.灵活性好 什么是简单工厂模式? 从设计模式的类型上来说,简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一.简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例.简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现. 简单工厂模式的好处? (1)将具体业务和实现进行分离 (2)将多个具体业务之间进行解耦 解决的问题? 单独的类来创造