zoukankan      html  css  js  c++  java
  • 第一章-简单工厂模式

    之前一直想学习一下设计模式,听说《大话设计模式》这本书讲的比较通俗易懂,正好现在有时间就学习一下,写个博客记录一下自己的学习感悟!!

    1.简单加减乘除计算器实现

    图片

    计算器程序工厂模式UML图
     
    #include<iostream>
    
    using namespace std;
    
    /*Operation操作类*/
    class Operation
    {
    private:
    	double a, b;
    public:
    	Operation() : a(0), b(0) {}
    	void set_a(double ta) { a = ta; }
    	double get_a() { return a; }
    
    	void set_b(double tb) { b = tb; }
    	double get_b() { return b; }
    
    	virtual double GetResult()
    	{
    		double result = 0;
    		return result;
    	}
    
    };
    
    /*加减乘除类*/
    class OperationAdd : public Operation
    {
    	double GetResult()
    	{
    		double result = 0;
    		result = get_a() + get_b();
    		return result;
    	}
    };
    
    class OperationSub : public Operation
    {
    	double GetResult()
    	{
    		double result = 0;
    		result = get_a() - get_b();
    		return result;
    	}
    };
    
    class OperationMul : public Operation
    {
    	double GetResult()
    	{
    		double result = 0;
    		result = get_a() * get_b();
    		return result;
    	}
    };
    
    class OperationDiv : public Operation
    {
    	double GetResult()
    	{
    		double result = 0;
    		if (get_b() == 0)
    			throw "错误:除数不能为0";
    		result = get_a() / get_b();
    		return result;
    	}
    };
    
    /*简单工厂类*/
    class OperationFactory
    {
    public:
    	static Operation* createOperate(char operate)
    	{
    		Operation* oper = nullptr;
    		switch (operate)
    		{
    		case '+':
    			oper = new OperationAdd;
    			break;
    		case '-':
    			oper = new OperationSub;
    			break;
    		case '*':
    			oper = new OperationMul;
    			break;
    		case '/':
    			oper = new OperationDiv;
    			break;
    		}
    
    		return oper;
    	}
    };
    
    
    int main()
    {
    
    	try {
    	    /*通过一个单独的类来做这个创造实例化的过程,这就是工厂*/
    		Operation *oper = OperationFactory::createOperate('+');
    		oper->set_a(5);
    		oper->set_b(4);
    		double result = oper->GetResult();
    		cout << result << endl;
    	}
    	catch (const char* e)
    	{
    		cout << e << endl;
    	}
    	
    
    	system("pause");
    	return 0;
    }
    
    

    2.UML图

    UML图

    • ‘动物’矩形框,代表一个类。类图分三层,第一层显示类的名称,如果是抽象类,则用斜体显示。第二层是类的特性,通常就是字段和属性。第三层是累的操作,通常是方法或行为。注意前面的符号,‘+’表示public,‘-’表示private,‘#’表示protected。
    • 左下角飞翔,表示一个接口图,与类图的主要区别是顶端有<>。第一行是接口名称,第二行是接口方法。接口还有另一种表示方法,俗称棒棒糖表示法,就是唐老鸭类实现了‘讲人话’的接口。
    • 继承关系用空心三角形+实线来表示。实现接口用空心三角形+虚线来表示。
    • 当一个类‘知道’另一个类是,可以用关联(association)。关联关系用实线箭头来表示。
    • 聚合表示一种弱的‘拥有’关系,体现的是A对象可以包含B对象,但B对象不是A对象的一部分。聚合关系用空心的菱形+实线箭头来表示。
    • 合成/组合(composition),是一种强的‘拥有’关系,体现了严格的部分和整体的关系,部分和整体的声明周期一样。合成关系用实心的菱形+实线箭头来表示。连线的两端的数字被称为基数,表示这一端的类有几个实例(关联和聚合也可以有基数)。
    • 依赖关系,用虚线箭头表示。
  • 相关阅读:
    【GStreamer开发】GStreamer基础教程14——常用的element
    【GStreamer开发】GStreamer基础教程12——流
    【GStreamer开发】GStreamer基础教程12——流
    【GStreamer开发】GStreamer基础教程11——调试工具
    【GStreamer开发】GStreamer基础教程11——调试工具
    【GStreamer开发】GStreamer基础教程10——GStreamer工具
    【GStreamer开发】GStreamer基础教程10——GStreamer工具
    【GStreamer开发】GStreamer基础教程09——收集媒体信息
    【GStreamer开发】GStreamer基础教程08——pipeline的快捷访问
    【GStreamer开发】GStreamer基础教程08——pipeline的快捷访问
  • 原文地址:https://www.cnblogs.com/wfcg165/p/11982264.html
Copyright © 2011-2022 走看看