设计模式-工厂方法模式

文章目录

  • 设计模式-工厂方法模式
    • 工厂方法模式实现计算器
      • 首先写一个运算类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();

简单工厂模式与工厂方法模式的比较

简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖。

工厂方法模式,定义了一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。