(1)首先了解下简单工厂模式。如图:
工厂类一般用于生产其他对象。举个例子,有个雪糕工厂可以创建各种雪糕,不用每次需要造一个雪糕时先建一个工厂吧,都是用现成的工厂直接生产。
简单工厂类,根据传的字符串不同,会创建不同的对象。此时有个严重的缺点就是,我增加一种运算,就要手动修改简单工厂类,这样是违背了开闭原则。
为什么说违背开闭原则?
简单工厂类里面有创建对象的逻辑,当增加之前没有的对象时,需要增加逻辑代码。此时运算类的getResult()只有四种运算,如果我要增加取余数运算,也需要改此代码。
(2)工厂方法模式:定义了一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
使用工厂方法改造图1-1:
仔细观察会发现:工厂方法模式实现时,客户端需要决定实例化哪一个工厂来实现运算类,选择判断的问题从简单工厂迁移到客户端了。