工厂方法定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到子类。
简单工厂vs工厂方法:
简单工厂最大的优点在于工厂类包含了必要的逻辑判断,根据客户端的选择条件动态的实例化相关的类,对于客户端而言,去除了与具体产品的依赖。
工厂方法实现时,客户端需要决定实例化哪一个工厂来实现运算类,选择判断的问题还是存在,也就是说,工厂方法把简单工厂的内部逻辑移到了客户端代码来进行,如果想要增加新的功能不需要修改工厂类,而是修改客户端。
//操作计算接口
public interface IOperation
{
int GetResult(int numOne,int numTwo);
}
//加法运算
public class AddOperation : IOperation
{
public int GetResult(int numOne, int numTwo)
{
return numOne + numTwo;
}
}
//减法运算
public class SubOperation : IOperation
{
public int GetResult(int numOne, int numTwo)
{
return numOne - numTwo;
}
}
//工厂方法接口
public interface IOperationFactoryMethod
{
IOperation CreateOperation();
}
//加法工厂方法
public class AddFactory : IOperationFactoryMethod
{
public IOperation CreateOperation()
{
return new AddOperation();
}
}
//加法工厂方法
public class SubFactory : IOperationFactoryMethod
{
public IOperation CreateOperation()
{
return new SubOperation();
}
}
//测试;创建工厂方法来返回计算类
IOperationFactoryMethod fac = new AddFactory();
IOperation oper = fac.CreateOperation();
int re = oper.GetResult(1, 2);