简单工厂模式
模式的核心是工厂类,这个类负责产品的创建,而客户端可以免去产品创建的责任,这实现了责任的分割。但由于工厂类集中了所有产品创建逻辑的,如果不能正常工作的话会对系统造成很大的影响。如果增加新产品必须修改工厂角色的源码改工厂角色的源码。
个人理解就是在一个工厂内(工厂类),定义好规范标准(父类,虚方法),然后同工种各司其职(子类)。然后老板(客户端)在说要生产啥,咱就干啥。当然为了增加灵活性,可以引进不同产线,这样就需要选择(选择算法)。
工厂类最大的贡献就是低耦合,这样修改起来风险小,但是相对的维护阅读难度加大,如果有完整的功能说明书或者uml图,那将会很省事。在开发c/s系统时,后台为C++等程序时,工厂类的想法其实很是方便,将后台功能函数分为3层,就能做到较好的耦合性。当然最好比避免不同功能的重复调用,否则只能是导致最后牵一发动全身。工厂类很适合一些业务逻辑的编写,如果别人已经封装过的程序,你最好不要再用工厂类了,否则层层调用,反而增加了以后的维护难度。
策略模式
策略模式(Strategy):它定义了算法家族,分别封装起来,让他们之前可以互相替换,此模式让算法的变化,不会影响到实用算法的客户。
策略模式会用到抽象,就是abstract和override。所以聚合相同属性和功能才能形成一个类。
策略模式将算法和选择分开,这点和工厂类似,但是算法可以复用的,工厂工人却最好只能完成一项工作。在复用的情况下,当然调用规则要明确啦,而且是解决同一类的事情。当面对需求修改时,策略不变,修改算法即可了。一改百改,方便又实用,而且单元测试也方便。
策略模式和简单工厂类有点类似,但是更讲究复用和聚合,个人觉得侧重点不同。