设计模式:工厂方法
Posted uptothesky
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式:工厂方法相关的知识,希望对你有一定的参考价值。
工厂方法模式(Factory Method):定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
namespace SimleFactory { public class Operation { public double NumberA { get; set; } public double NumberB { get; set; } public virtual double GetResult() { double result = 0; return result; } } public class OperationAdd:Operation { public override double GetResult() { return NumberA + NumberB; } } public class OperationSub : Operation { public override double GetResult() { return NumberA - NumberB; } } public class OperationMul : Operation { public override double GetResult() { return NumberA * NumberB; } } public class OperationDiv : Operation { public override double GetResult() { if (NumberB == 0) throw new Exception("除数不能为0."); return NumberA / NumberB; } } /// <summary> /// 简单工厂 /// </summary> public class OperationFactory { public static Operation CreateOperation(string operate) { Operation oper = null; switch(operate) { case "+": oper = new OperationAdd(); break; case "-": oper = new OperationAdd(); break; case "*": oper = new OperationAdd(); break; case "/": oper = new OperationAdd(); break; } return oper; } } /// <summary> /// 工厂方法 /// </summary> public interface IFactory { Operation CreateOperation(); } public class AddFactory : IFactory { public Operation CreateOperation() { return new OperationAdd(); } } public class SubFactory:IFactory { public Operation CreateOperation() { return new OperationSub(); } } public class MulFactory:IFactory { public Operation CreateOperation() { return new OperationMul(); } } public class DivFactory:IFactory { public Operation CreateOperation() { return new OperationDiv(); } } }
测试代码:
IFactory factory = new AddFactory(); Operation oper= factory.CreateOperation(); oper.NumberA = 1; oper.NumberB = 2; double result = oper.GetResult(); Assert.AreEqual(result, 3);
以上是关于设计模式:工厂方法的主要内容,如果未能解决你的问题,请参考以下文章