工厂模式
[ Factory ]
[ 创建型模式 ]
[
计算接口 : 定义了一系列的计算方法
具体计算类 : 继承了计算接口 , 实现了不同的计算方法
对象创建接口 : 定义了一个用于创建对象方法的接口
对象创建类 : 继承了对象创建接口 , 实现了对象创建方法 , 每一个 "具体计算类" 都有一个具体的对象创建工程类 。
]
定义一个用于创建对象的接口 , 让子类决定实例化哪一个类 。工厂方法使一个类的实例化延迟到其子类 。
比简单工厂模式更容易扩展 , 更符合 开放扩展 - 封闭修改原则
简单工厂模式 扩展时需要修改工厂类的判断业务 , 违背了 开放扩展 - 封闭修改 原则
创建计算接口 , 定义计算公用方法名
创建计算子类 , 继承计算接口 , 实现计算方法
创建对象工厂接口 , 定义计算对象生成方法
针对不同的计算子类 , 生成不同的计算子类工厂类 , 继承对象工厂接口 , 实现算法对象生成对象 , 返回计算子类
使用:
声明一个对象工厂接口实例 , 引用要做计算的计算工厂子类
由对象工厂实例创建一个计算对象
源码:
public interface ICalculate
{
int NumberA { get;set; }
int NumberB { get;set; }
int GetResult();
}
public class CalculateAdd : ICalculate
{
private int _numberA;
private int _numberB;
#region ICalculate 成员
public int NumberA
{
get
{
return _numberA;
}
set
{
_numberA = value;
}
}
public int NumberB
{
get
{
return _numberB;
}
set
{
_numberB = value;
}
}
public int GetResult()
{
return NumberA + NumberB;
}
#endregion
}
public class CalculateDiv : ICalculate
{
private int _numberA;
private int _numberB;
#region ICalculate 成员
public int NumberA
{
get
{
return _numberA;
}
set
{
_numberA = value;
}
}
public int NumberB
{
get
{
return _numberB;
}
set
{
_numberB = value;
}
}
public int GetResult()
{
if (NumberB > 0)
{
return NumberA / NumberB;
}
else
{
return 0;
}
}
#endregion
}
public interface ICalculateFactory
{
ICalculate CreateOperation();
}
public class CalculateAddFactory : ICalculateFactory
{
#region ICalculateFactory 成员
public ICalculate CreateOperation()
{
return new CalculateAdd();
}
#endregion
}
public class CalculateDivFactory : ICalculateFactory
{
#region ICalculateFactory 成员
public ICalculate CreateOperation()
{
return new CalculateDiv();
}
#endregion
}
class Program
{
static void Main(string[] args)
{
ICalculateFactory calculateFactory = new CalculateAddFactory(); 只需要引用不同的计算工厂子类就可以实现不同的算法
ICalculate calculate = calculateFactory.CreateOperation();
calculate.NumberA = 10;
calculate.NumberB = 10;
int result = calculate.GetResult();
Console.WriteLine(result);
Console.ReadKey();
}
}