2. 简单工厂模式(Simple Factory Pattern)
一、介绍
设计模式的出现是解决代码的耦合,将功能颗粒化,各司其职;提高了代码的灵活性,使代码块 更容易扩展、更容易维护 及 更容易复用(不用粘来粘去) ,这节介绍工厂模式家族中最简单的一个 —— 简单工厂模式(Simpl Factory Pattern),根据外界给定的信息,决定创建哪个类的对象。就我目前所认识到的,简单工厂模式解决的是将使用者和创造者分离;使用该功能的人不需要去了解,功能内部是怎么实现的,只要告诉功能模块我要什么就可以了。而,创造该功能者,不需要知道外界谁调用它,指向外提供一个工厂类 负责创建不同的对象即可。
二、UML 图

三、优缺点
优点:这不用多说了,创建者和使用者分离后,似的后续维护扩展更加方便,比如我现在要加个除法运算,那么加一个除法类,再在简单工厂类的switch语句中加一行就可以了,不用动其他运算类,安全性也得到了保证。
缺点:工厂类里集中了所有子类的创建逻辑,每次添加新的算法,我都要动这个类,还牵扯到其他的运算类,可见简单工厂模式并没有把这块问题解决,如何解?这里卖个关子,继续读下一节就会了解了。
四、附录
抽象类:
public abstract class Operation { private double _numA; private double _numB; public double NumA { get { return this._numA; } set { this._numA = value; } } public double NumB { get { return this._numB; } set { this._numB = value; } } public abstract double GetResult(); }
三个继承类:
public class OperationAdd:Operation { public override double GetResult() { return NumA + NumB; } }
public class OperationSub:Operation { public override double GetResult() { return NumA - NumB; } }
public class OperationMul : Operation { public override double GetResult() { return NumA * NumB; } }
工厂类:
public static Operation CreateOperation(string operate) { switch (operate) { case "+": return new OperationAdd(); case "-": return new OperationSub(); case "*": return new OperationMul(); default: return null; } }
使用
Console.Write("请输入数字A:"); string numA = Console.ReadLine(); Console.Write("请输入运算符号(+、-、*):"); string operate = Console.ReadLine(); Console.Write("请输入数字A:"); string numB = Console.ReadLine(); Operation oper = OperationFactory.CreateOperation(operate); oper.NumA = Convert.ToDouble(numA); oper.NumB = Convert.ToDouble(numB); string result = Convert.ToString((oper.GetResult()), CultureInfo.InvariantCulture); Console.WriteLine(result); Console.ReadLine();
真正的大师永远怀着一颗学徒的心。


浙公网安备 33010602011771号