前言:
系列的学习大话设计模式笔记,希望在学习的道路上能不断完善、提高自己的认识。这次文章对学习的简单工厂模式来做一些认识。
在结束了VB的学习后这是最新的面向对象的洗礼,开始的难理解、长时间的不能理解,在找些资料看看后,好像有点意思但又没什么概念。我们在这样的情况下更上一层了,因为我们现在不单单的为实现某个小功能而完事,更高的角度去设计怎么更经济、更安全、可维护性高,真正的从设计者的角度出发来考虑问题。
简单工厂模式的介绍
1.定义:简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。以上是百度的内容,
2.简单的来说,就是负责加工的工厂,因此在大化设计模式中他同样可以理解为负责生产的一个类,最常使用的new创建对象时,该类就依赖于这个对象因此之间的耦合度高,当需求变化时,我们就不得不去修改此类的源码,此时我们可以运用面向对象(OO)的很重要的原则去解决这一的问题,该原则就是——封装改变,既然要封装改变,自然也就要找到改变的代码,然后把改变的代码用类来封装,这样的一种思路也就是我们简单工厂模式的实现方式了。下面通过一个现实生活中的例子来引出简单工厂模式。
简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。也就说实例化谁。
3.对于书上的例子我们现在展示:
(1)operation运算类
public class Operation { private double _numberA = 0; private double _numberB = 0; //NumberA属性 public double NumberA { get { return _numberA; } set { _numberA = value; } } //NumberB属性 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 OperationDiv : Operation //除法法类,继承运算类 { //方法重写 public override double GetResult() { double result = 0; //判断 if (NumberB == 0) throw new Exception("除数不能为0!"); else result = NumberA / NumberB; return result; } }(2) 简单工厂模式
public class OperationFactory public static Operation createOperate(string operate) { Operation oper = null; switch (operate) { //实例化加法类 case "+": oper = new OperationAdd(); break; break; //实例化除法类 case "/": oper = new OperationDiv(); break; } return oper; }客户端代码:
Operation oper; oper = OperationFactory.createOperate("+"); oper.NumberA = 1; oper.NumberB = 2; double resultAdd = oper.GetResult(); //显示运算结果 Console.WriteLine("加法运算的结果值为:{0}", resultAdd); Console.ReadLine();简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,但不属于23种GOF设计模式之一。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式,可以理解为是不同工厂模式的一个特殊实现。简单工厂模式的实质是由一个工厂类根据传入的参数,动态决定应该创建哪一个产品类(这些产品类继承自一个父类或接口)的实例。