简单工厂模式
模拟一个简单的需求 设计一个简单的计算器,能够完成加减乘除的操作,并且能够设置运算的两个操作数(暂时不考虑计算器的界面)。 分析 思路1 可以创建一个计算器类,里面包含加减乘除的运算,以及设置获取操作数等操作,客户端直接创建一个计算器的对象,调用对应接口去执行运算。如果后续要添加新的运算,每次需要更改计算器类。 风险:由于新增操作每次要更改原来设计的类,可能会由于不小心改掉了原来的实现计算逻辑,从而导致原来正常运行的程序得不到正确的结果。 思路2 为每种运算单独设计一个类,客户端使用的时候可以根据不同的运算创建不同的对象,执行相应的操作。 由于每种运算符都有类似的操作,只是最终对数据执行的运算不一样,为了避免每个运算类写重复的代码,可以抽象出来一个运算类,包含公共的方法(设置操作数,获取操作数,获取计算结果等),具体运算类应该继承这个基类,在每个子类分别执行自己的运算。 此时,客户端需要使用运算器的时候,创建对象使用new的时候还是需要知道每个运算类的类名,若这些类分别在不同的头文件声明,使用这些类的时候还需要include一堆的头文件。如果要新增加运算符,上述的地方都要改动,很容易遗漏,非常的繁琐。 解决方案:由于创建的对象都是类似的对象(他们的父类都是同一个),可以创建一个类,提供一个静态方法,把创建具体类对象的工作都放到这个类中来完成,当客户端需要使用运算器的时候