工厂方法模式,定义一个用于创建对象的接口,让子类决定实例化哪一个类。 工厂方法是一个类的实例化延迟到子类
以上三个图的意思是, 运算类的子类继承父类(运算类本身),和工厂类的子类继承父类(工厂类本身). 再接着,工厂类的子类实例化对应的运算类子类。
代码:关于计算机加减乘除问题
public class Operation
{
private double numberA = 0;
public double NumberA
{
get { return numberA; }
set { numberA = value; }
}
private double numberB = 0;
public double NumberB
{
get { return numberB; }
set { numberB = value; }
}
public virtual double Result()
{
return 0;
}
}
public class Jia : Operation
{
public override double Result()
{
return NumberA + NumberB;
}
}
public class Jian : Operation
{
public override double Result()
{
return NumberA - NumberB;
}
}
public class Cheng : Operation
{
public override double Result()
{
return NumberA * NumberB;
}
}
public class Chu : Operation
{
public override double Result()
{
return NumberA / NumberB;
}
}
//工厂 类 接口
interface IFactory
{
Operation CreateOperation();
}
//加法工厂类
public class JiaFactory : IFactory
{
public Operation CreateOperation()
{
return new Jia();
}
}
public class JianFactory : IFactory
{
public Operation CreateOperation()
{
return new Jian();
}
}
public class ChengFactory : IFactory
{
public Operation CreateOperation()
{
return new Cheng();
}
}
public class ChuFactory : IFactory
{
public Operation CreateOperation()
{
return new Chu();
}
}
在Main()方法中的调用
IFactory per = new JiaFactory();
Operation op = per.CreateOperation();
op.NumberA = 10;
op.NumberB = 2;
Console.WriteLine(op.Result());
**总结: 工厂方法模式实现时,客户端需要决定实例化哪一个工厂类实现它的运算类,选择判断的问题还是存在的。也就是说,工厂方法把简单工厂的内部逻辑判断转移到了客户端进行,你想要加功能,本来是修改工厂类的,现在是修改客户端。
工厂方法模式是简单工厂模式的进一步抽象和推广,由于使用了多态性,工厂方法模式保持了简单工厂模式的优点,而且克服了它的缺点**