zoukankan      html  css  js  c++  java
  • 设计模式-简单工厂模式

    简单工厂模式:是一种实例化对象的方式,只要输入实例化对象的名字,就可以通过工厂对象的相应工厂函数来制造你需要的对象

    核心是,对于一个父类的多个继承子类,工厂对象的工厂函数根据用户输入,自动new 出一个子类对象 并返回其父类的指针,这样利用父类的指针执行父类的虚函数,就可以动态绑定子类的重写函数,从而实现多态.

    #include <stdlib.h>
    #include <stdio.h>
    #include <string.h>
    #include <iostream>
    #include  <memory>
    
    using namespace std;
    
    class Operation
    {
    private:
    	double A, B;
    public:
    	double GetA() const {return A;}
    	double GetB() const {return B;}
    	void SetA(double x) {A=x;}
    	void SetB(double y) {B=y;}
    	double virtual GetResult(){return 0;}
    	Operation():A(0), B(0){}
    };
    
    class Add : public Operation
    {
    public:
    	double GetResult()
    	{
    		return GetA()+GetB();
    	}
    };
    
    class Sub : public Operation
    {
    public:
    	double GetResult()
    	{
    		return GetA()-GetB();
    	}
    };
    
    class Mul : public Operation
    {
    public:
    	double GetResult()
    	{
    		return GetA()*GetB();
    	}
    };
    
    class Div : public Operation
    {
    public:
    	double GetResult()
    	{
    		return GetA()/GetB();
    	}
    };
    
    class SimpleFactory
    {
    public:
    	static Operation * CreateOpeartor(char ch)
    	{
    		Operation * p;
    		switch(ch)
    		{
    		case '+':
    			p = new Add();
    			break;
    		case '-':
    			p = new Sub();
    			break;
    		case '*':
    			p = new Mul();
    			break;
    		case '/':
    			p = new Div();
    			break;
    		}
    		return p;
    	}
    };
    
    int main(int argc, char *argv[])
    {
    	double A = 0;
    	double B = 0;
    	char ch = '';
    	cin>>A>>ch>>B;
    
    	tr1::shared_ptr<Operation> op(SimpleFactory::CreateOpeartor(ch));
    	op->SetA(A);
    	op->SetB(B);
    	cout<<op->GetResult()<<endl;
    	system("pause");
    	return 0;
    }
    

      

  • 相关阅读:
    让man 显示中文
    对‘pthread_create’未定义的引用
    gcc和arm-linux-gcc区别
    ubuntu14.04下arm-linux-gcc 4.5.1的安装与配置
    MakeCode 递归生成资源文件
    Swagger 增加 DocumentFilter 隐藏不需要显示的接口
    Razor 模板自己渲染出结果 string
    .net core API 统一拦截错误
    内网机(无网络安装 .NET Core win开发环境
    netcore web.config ConnectionStrings AppSettings
  • 原文地址:https://www.cnblogs.com/zhaodun/p/7147453.html
Copyright © 2011-2022 走看看