设计模式练习:简单工厂模式
抽象基类(也可以用接口等实现):运算的基类
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 简单工厂模式_四则运算
{
abstract class Operation
{
protected double a;
protected double b;
public void SetValue(double a,double b)
{
this.a = a;
this.b = b;
}
public abstract double GetResult();
}
}
派生类:加减乘除运算
1.加法
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 简单工厂模式_四则运算
{
class Jia:Operation
{
public override double GetResult()
{
return a + b;
}
}
}
2.减法
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 简单工厂模式_四则运算
{
class Jian:Operation
{
public override double GetResult()
{
return a - b;
}
}
}
3.乘法
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 简单工厂模式_四则运算
{
class Cheng:Operation
{
public override double GetResult()
{
return a * b;
}
}
}
4.除法
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 简单工厂模式_四则运算
{
class Chu:Operation
{
public override double GetResult()
{
if(b!=0)
{
return a / b;
}
else
{
throw new Exception("除数为0");
}
}
}
}
5.等等。。。。
工厂类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 简单工厂模式_四则运算
{
class FactoryOperation
{
public static Operation GetOperation(double a,double b,string operation)
{
Operation value = null;
if(operation=="+")
{
value = new Jia();
}
else if(operation=="-")
{
value = new Jian();
}
else if(operation=="*")
{
value = new Cheng();
}
else if(operation=="/")
{
value = new Chu();
}
value.SetValue(a, b);
return value;
}
}
}
主程序调用:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace 简单工厂模式_四则运算
{
class Program
{
static void Main(string[] args)
{
var x = FactoryOperation.GetOperation(3, 0, "/");
double result = x.GetResult();
Console.WriteLine(result);
Console.ReadKey();
}
}
}