簡介: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;
}
}
}
注意:
只有一種類型的產品(與子類數量無關)
只有一個工廠
一個工廠只生產一種產品