文章目录
- 设计模式-工厂方法模式
- 工厂方法模式实现计算器
- 首先写一个运算类Operation类
- 加减乘除类
- 先创建一个工厂接口
- 具体工厂实现这个接口
- 客户端实现
- 简单工厂模式与工厂方法模式的比较
设计模式-工厂方法模式
工厂方法模式实现计算器
首先写一个运算类Operation类
public class Operation{private double _numberA = 0;private double _numberB = 0;public double NumberA{get {return _numberA;}set {_numberA = value;}}public double NumberB{get {return _numberB;}set {_numberB = value;}}public virtual double GetResult(){double result = 0;return result;}
}
加减乘除类
class OperationAdd : Operation //加法类,继承运算类
{public override double GetResult(){double result = 0;result = NumberA + NumberB;return result;}
}
class OperationSub : Operation //减法类,继承运算类
{public override double GetResult(){double result = 0;result = NumberA - NumberB;return result;}
}
class OperationMul : Operation //乘法类,继承运算类
{public override double GetResult(){double result = 0;result = NumberA * NumberB;return result;}
}
class OperationDiv : Operation //除法类,继承运算类
{public override double GetResult(){double result = 0;if(NumberB == 0)throw new Exception("除数不能为0。");result = NumberA / NumberB;return result;}
}
先创建一个工厂接口
interface IFactory
{Operation CreateOperation();
}
具体工厂实现这个接口
class AddFactory:IFactory{public Operation CreateOperation(){return new OperationAdd();}
}
class SubFactory:IFactory{public Operation CreateOperation(){return new OperationSub();}
}
class MulFactory:IFactory{public Operation CreateOperation(){return new OperationMul();}
}
class DivFactory:IFactory{public Operation CreateOperation(){return new OperationDiv();}
}
客户端实现
IFactory operFactory = new AddFactory();
Operation oper = operFactory.CreateOperation();
oper.NumberA = 1;
oper.NumberB = 2;
double result = oper.GetResult();
简单工厂模式与工厂方法模式的比较
简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖。
工厂方法模式,定义了一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。