大话设计模式-第一章-简单工厂模式

一、UML图

二、包含的角色

简单工厂模式包含三个角色:(1)工厂类Factory(2)抽象产品类AbstractProduct(3)具体产品类ConcreteProduct。

(1)Factory:工厂类是用来制造产品的。因此,在Factory中有一个用于制造产品的Create函数或者Generate函数之类的函数。这个函数能够根据“标识符”的不同生成不同的ConcreteProduct,当然这些ConcreteProduct都是继承自AbstractProduct的。

(2)AbstractProduct:抽象产品是从其他具体产品抽象出来的。抽象产品类只有一个。

(3)ConcreteProduct:具体产品类继承自抽象产品类,可以有多个。当需要增加新的产品的时候就增加一个继承自抽象产品类的具体产品类即可。

三、优势:

实现了松耦合,当需要增加一种新产品(在大话设计模式中,例子是 运算Operation),只需要做两点改动:

(1)增加一个继承自抽象产品(抽象的运算)的具体产品(一种具体的运算);

(2)在工厂类中,switch中,增加一种根据标识符产生新运算的case即可。

四、C++实现

#include <iostream>
#include <cstdlib>

using namespace std;
//抽象产品类
class Operation
{
protected:
	double numberA;
	double numberB;

public:
	double getA()
	{
		return numberA;
	}
	double getB()
	{
		return numberB;
	}
	void setA(double number)
	{
		numberA=number;
	}
	void setB(double number)
	{
		numberB=number;
	}

	virtual double GetResult()
	{
		double result=0;
		return result;
	}
};
//下面是四种具体产品类
class OperationAdd:public Operation
{
public:
	double GetResult()
	{
		double result=0;
		result=numberA+numberB;
		return result;
	}
};

class OperationSub:public Operation
{
public:
	double GetResult()
	{
		double result=0;
		result=numberA-numberB;
		return result;
	}
};

class OperationMul:public Operation
{
public:
	double GetResult()
	{
		double result=0;
		result=numberA*numberB;
		return result;
	}
};

class OperationDiv:public Operation
{
public:
	double GetResult()
	{
		double result=0;
		if(numberB!=0)
			result=numberA/numberB;
		return result;
	}
};

//工厂类
class OperationFactory
{
public:
	Operation* createOperation(char type)
	{
		Operation* oper=new Operation;
		switch(type)
		{
		case '+':
			oper=new OperationAdd;
			break;
		case '-':
			oper=new OperationSub;
			break;
		case '*':
			oper=new OperationMul;
			break;
		case '/':
			oper=new OperationDiv;
			break;
		}
		return oper;
	}
};

//客户端
void main()
{
	Operation* oper;
	OperationFactory of;
	oper=of.createOperation('/');
	oper->setA(1);
	oper->setB(2);
	cout<<oper->GetResult()<<endl;
	system("pause");
}
时间: 2024-10-14 06:35:49

大话设计模式-第一章-简单工厂模式的相关文章

大话设计模式第一章-简单工厂模式

1 简单工厂模式--uml   继承关系--空心三角形--实线 实线接口 空心三角形--实虚线 聚合关系  空心菱形---实线箭头    雁群和大雁 组合关系-  实心菱形---实线箭头   鸟和翅膀 依赖关系-虚线箭头  如动物需要氧气和水  d 简单工厂模式demo--本地demo 库 原文地址:https://www.cnblogs.com/spps/p/9942846.html

大话设计模式--第一章 简单工厂设计模式

简单工厂设计模式 案例: 写一个计算器, 实现加减乘除. 第一步: 写一份简单的代码 package com.chapter1; public class Caculator1 { public static void main(String[] args) { if(args.length < 3){ System.out.println("参数个数异常"); return ; } Double num1 = Double.parseDouble(args[0]); Doubl

大话设计模式C++版——简单工厂模式

简单工厂模式应该是所有设计模式中最简单,也最基础的一种模式,以下是一个简单的采用工厂模式写一个加减法的计算器. 1.抽象接口类--依赖倒转原则(高层和底层都要依赖于抽象,针对接口编程) class IOperation { public: IOperation() : m_nNuml(0), m_nNumr(0) {} virtual ~IOperation() {} virtual void SetNum(int nNuml = 0, int nNumr = 0) { m_nNuml = nN

第一章 简单工厂模式

面向对象编程永远在考虑:解藕和复用. 设计模式是前辈总结的结果,这些模式都是基于问题本身的抽象,活学活用才是王道. /////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////// 简单工厂模式具有面向对象编程的基本优点:封装.继承和多态. /** * Created by hero

[大话设计模式]学习笔记——简单工厂模式

序 说好的每天进步一点点的,结果工作太忙,一直在加班,都没有学习新东西.我还要进BAT呢. 坚持每天学习新东西. 写代码时,意识到在代码结构上还是有点欠缺.赶紧补上. 纪录对设计模式的认识.小菜变大鸟.进攻BAT. 应用场景: 编写一个计算器控制台程序,要求输入两个数和运算符号,得到结果. 这本书使用C#写的.已有博主用JAVA写出来,参考:http://blog.csdn.net/ghsau/article/details/8163418 常见的做法: 写一个方法封装计算机的功能,我们只需传参

第2章 简单工厂模式(Sample Factory)

原文 第2章 简单工厂模式(Sample Factory) 一般用到的场景:对象多次被实例引用,切有可能会发生变化 拿我们的简单三层举例子 先定义dal层 1 2 3 4 5 6 7 8     class Dal     {         public void Delete()         {           //...          }             } 工厂类 1 2 3 4 5 6 7 8 9 10     class Factory     {        

C#设计模式系列:简单工厂模式(Simple Factory)

1.简单工厂模式简介 1.1>.定义 简单工厂模式定义一个Factory类,可以根据参数的不同返回不同类的实例,被创建的实例通常有共同的父类. 简单工厂模式只需要一个Factory类. 简单工厂模式又称为静态工厂模式,Factory类为静态类或包含静态方法. 1.2>.使用频率  中 2.简单工厂模式结构 2.1>.结构图 2.2>.参与者 简单工厂模式参与者: ◊ Product:抽象产品类,将具体产品类公共的代码进行抽象和提取后封装在一个抽象产品类中. ◊ ConcretePr

(设计模式之一)浅析简单工厂模式

简单工厂模式 举个两个例子: 我输入两个数字和(+ - * /)其中一个符号,计算出两个数的结果. 饲养员让(狗 猫 鸟 猪)其中一个动物 叫 这里就是一个简单的工厂模式, 用户只需要提供他需要的接口,而不需要知道具体的实现 工厂判断用户提供的接口,创建对应的子类对象, 返回父类变量给用户(这里涉及里氏替换原则:声明父类变量替换子类对象) 当后面追加新的操作类例如:求根类  求平方类 , 从数据安全角度: 只需要创建新的类继承于Operation抽象类 ,从而不影响其他操作类(+ - * /),

第1章 简单工厂模式

应用层: using System; using System.Collections.Generic; using System.Text; using OperationLibrary; namespace 计算器控制台 { class Program { static void Main(string[] args) { try { Console.Write("请输入数字A:"); string strNumberA = Console.ReadLine(); Console.