一:定义(什么是简单工厂类)
抽象出一个类,专门负责其他类的实例化。根据客户端的不同要求,完成不同类的实例化。
二:优点
将类的实例化从客户端里独立出来,客户端不必考虑具体的对象如何创建。
工厂类负责创建具体的类,客户端直接使用就可以
三:缺点
增加新功能需要增加新的子类。
四:实现
题意:客户输入两个数和运算符号,得到结果。
构成:三个部分。运算类、工厂类、客户端、以及他的子类。
UML类图:见一
代码:
运算类 public class Operation //父类,算法类 { private double _numberA = 0; //定义一个属性A,接受第一个数 public double NumberA { get { return _numberA; } set { _numberA = value; } } private double _numberB = 0; //定义一个属性B,接受第二个数 public double NumberB { get { return _numberB; } set { _numberB = value; } } public virtual double GetResult() //获得返回值的操作 { double result = 0; return result; } } class OperationAdd : Operation //加法类,继承算法类 { public override double GetResult() { double result = 0; result = NumberA + NumberB; return result; } } class OperationSub : Operation //减法类,继承算法类 { public override double GetResult() { double result = 0; result = NumberA - NumberB; return result; } } class OperationMul : Operation //乘法类,继承算法类 { public override double GetResult() { double result = 0; result = NumberA * NumberB; return result; } } class OperationDiv : Operation //除法类,继承算法类 { public override double GetResult() { double result = 0; result = NumberA / NumberB; return result; } } 工厂类:此类负责类的实例化,是简单工厂的重点。 class OperationFactory //作为一个工厂类,负责创造实例 { public static Operation creatOperate(string operate) { Operation oper = null; switch (operate) { case “+”: oper = new OperationAdd(); break; case “-”: oper = new OperationSub(); break; case “*”: oper = new OperationMul(); break; case “/”: oper = new OperationDiv(); break; } return oper; } } 客户端 static void Main(string[] args) { Operation oper; oper = OperationFactory.creatOperate("+"); //根据输入的符号,在工厂里取对应的实例化的类 oper.NumberA = 1; oper.NumberB = 2; double result = oper.GetResult(); //本例中调用的加法类GetResult方法,让上面两个参数相加 Console.WriteLine(result); }
五:涉及知识点
方法的重写:
父类方法里添加virtual关键字,子类重写时用override关键字。
构造方法:
与类名同名,没有返回值,在new的时候进行调用。