作者:平凡屋之换 | 来源:互联网 | 2023-07-31 06:55
2019-11-12
参考大话数据结构
假设我们要解决一个问题:编程实现一个计算器
用面向过程的思想,很容易想到,首先输入两个操作数,再判断运算符进行运算,输出结果即可,但是这样的代码很难维护,我们需要使用面向对象的思想:
(1)将运算与显示分离,使用到了面向对象中封装的思想,用一个类来处理运算;
(2)如果说我们要添加一个新的运算,那么我们在修改代码时可以看到其它的几种运算,这样不是很好,我们将几种运算符放到各自的类中,这样我们在添加运算符的时候只要添加相应的类即可,但是我们如何知道我们要使用哪一个类呢?
(3)简单工厂模式:所谓工厂,就是用一个单独的类来创造实例,我们创建一个工厂类,在这个工厂类中根据用户输入的运算符创建实例即可,在该工厂类中需要进行判断来区分不同的运算符,如果说我们要添加一个新的运算,我们首先要添加该运算的类,其次也需要在工厂类中添加对该运算的判断,违背了我们的开放-封闭原则,怎么办呢?
(4)工厂方法模式:我们为所有的运算创建相应的工厂,如果说我们要添加一个新的运算,我们需要添加该运算的工厂类以及相应的运算类,其实这个就是客户端决定实例化哪一个工厂来实现运算类,选择判断的问题还是存在的,也就是说,工厂方法模式把简单工厂模式的内部逻辑判断移到了客户端代码来进行,原来是要改工厂类,现在是修改客户端。
(5)抽象工厂模式: