Factory Method
Factory Method(工厂方法)模式主要是为了隐藏对象创建这一任务的复杂性。客户通常不指定需要创建的具体类;客户通常面向接口或抽象类编程。让Factory类来负责创建具体的类型。通常Factory类有一个返回抽象类或者接口的静态方法。客户通常(并非总是)提供某种信息,然后Factory类使用提供的信息来确定创建并返回哪一个子类。
将创建子类的责任抽象出来所带来的好处是:
1、允许客户代码完全无需考虑依赖类是如何创建的,遵循DIP(Dependency Inversion Principle)。
2、把负责对象创建的代码集中起来,如果需要修改对象的生成方式,可以轻松定位并更新,而不会影响到依赖它的代码。
class Program { static void Main(string[] args) { IFactory operFactory = new AddFactory();有别于简单工厂中OperationFactory.CreateOperate("+");后期项目中可以使用AutoFac来解决new的问题。 Operation oper = operFactory.CreateOperation();从简单工厂中的一步,拆成了两步来生成所需的对象;Operation是抽象类,这里就面向了抽象类进行编程。 oper.NumberA = 1; oper.NumberB = 2; Console.WriteLine(oper.GetResult()); Console.Read(); } } 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(); } } public abstract class Operation { public double NumberA { get; set; } public double NumberB { get; set; } public abstract double GetResult(); } class OperationAdd:Operation { public override double GetResult() { return NumberA + NumberB; } } class OperationSub:Operation { public override double GetResult() { return NumberA - NumberB; } } class OperationMul:Operation { public override double GetResult() { return NumberA * NumberB; } } class OperationDiv : Operation { public override double GetResult() { return NumberA / NumberB; } }
工厂方法和简单工厂有些相似,最主要不同的地方就是在于:
简单工厂通过一个工厂类(OperationFactory)来创建对象,而工厂方法则是通过特定的方法来创建对象。
IFactory operFactory = new AddFactory();
针对上面的这条 new AddFactory(),在实际项目中,可以使用AutoFac 这一类的IOC框架来解决主动new的问题。