设计模式-简单工厂模式

anqier 2019-06-27

简单工厂模式:
案例:请用C++、Java、C#或vb.net任意一种面向对象语言实现一个计算机控制台程序,要求输入两个数和运算符号得到结果
case1:变量命名规范
case2:使用switch分支判断输入的运算符(取代if/else)
case3:新要求,如何易维护,易扩展,又容易复用?答曰:面向对象

3.1 易维护:要改功能,如将控制台的计算器修改为windows的计算器如何实现?
3.2 易复用:代码的逻辑可能并不仅是符合当前的功能,未来新的功能可能可以复用这个代码逻辑(功能)
3.3 易扩展:就目前案例,假如仅满足加减法,易扩展代表的就是在不影响加,减法功能的前提下(不需要重新编译等),添加乘除,开平方位移运算等

case4:首先想到的做法会是将控制台输入,运算,结果展示都写到一个方法(类)里,假如需要在不同的端做展示或计算时得复制代码,修改部分逻辑,但这样代码冗余,重复代码就非常多了。解决措施是将计算的代码,与显示的代码分离开,即单独封装好计算功能与显示功能。那么计算功能在该条件下是可以复用的。

case5:那么如果需要新增个运算方式,此时封装的计算功能的类需要重新编译,添加一个switch分支,为此,可以抽象出一个共通的父类,如算法类,各个运算都需要继承这个算法类,该算法类提供了一个获取计算结果值的方法,各子类(加减乘除运算类)仅需重写该方法,如此即便新增再多的新运算对之前的功能也没有影响

case6:本章重点来了,有那么多的子运算类了,如何管理好?通过工厂模式,在工厂类中的静态方法接收运算符参数再生产子运算类对象(switch 根据运算符 条件判断 生产那个子类对象 ),然后用父类对象去接收(多态),再把要计算的值赋给父类的成员变量,最后调用获取计算结果的方法获取到结果。

总结下:没想到一个这么小的功能就可以把抽象、封装、继承、多态体现的如此淋漓尽致,做个编程的有心人,避免做代码的搬运工。

相关推荐