文章目录
设计模式-工厂方法模式
工厂方法模式实现计算器
首先写一个运算类Operation类
java
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;
}
}
加减乘除类
java
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;
}
}
先创建一个工厂接口
java
interface IFactory
{
Operation CreateOperation();
}
具体工厂实现这个接口
java
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();
}
}
客户端实现
java
IFactory operFactory = new AddFactory();
Operation oper = operFactory.CreateOperation();
oper.NumberA = 1;
oper.NumberB = 2;
double result = oper.GetResult();
简单工厂模式与工厂方法模式的比较
简单工厂模式的最大优点在于工厂类中包含了必要的逻辑判断,根据客户端的选择条件动态实例化相关的类,对于客户端来说,去除了与具体产品的依赖。
工厂方法模式,定义了一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。