简介:ide
只有一个工厂(具体的,没有抽象)spa
只生产一种产品(抽象的产品)get
这种产品能够有多种具体产品类型(派生)string
代码实现:产品
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;it
namespace 简单工厂
{
class Program
{
static void Main(string[] args)
{
float result = 0f;
string str = "";
Console.WriteLine("请输入第一个运算数字");
float a = float.Parse(Console.ReadLine());
Console.WriteLine("请输入第二个运算数字");
float b = float.Parse(Console.ReadLine());
Console.WriteLine("请输入一个运算符");
str = Console.ReadLine();
opera ope = null;
ope = Factory.LoadOpera(str);
ope.Num1 = a;
ope.Num2 = b;
result = ope.GetResult();
Console.WriteLine("{0}{1}{2} = {3}", a,str, b, result);
Console.ReadLine();io
}
}class
public static class Factory//建立一个简单工厂用于生产相应的产品
{
public static opera LoadOpera(string op)
{
opera ope = null;
switch (op)
{
case "+": ope = new Add(); break; //注意:此处使用了里氏替换
case "-": ope = new Sub(); break;
case "*": ope = new multi(); break;
case "/": ope = new divide(); break;float
default:
Console.WriteLine("请在加减乘除中选择运算符");
break;
}static
return ope;
}
}
public abstract class opera//这个是运算符父类
{
protected float num1;
public float Num1
{
get { return num1; }
set { num1 = value; }
}
protected float num2;
public float Num2
{
get { return num2; }
set { num2 = value; }
}
public abstract float GetResult();
}
public class Add : opera//加法类
{
public override float GetResult()
{
return base.num1 + base.num2;
}
}
public class Sub : opera//减法类
{
public override float GetResult()
{
return base.num1 - base.num2;
}
}
public class multi : opera//乘法类
{
public override float GetResult()
{
return base.num1 * base.num2;
}
}
public class divide : opera//除法类
{
public override float GetResult()
{
return base.num1 / base.num2;
}
}
}
注意:
只有一种类型的产品(与子类数量无关)
只有一个工厂
一个工厂只生产一种产品