书摘:
面向对象的编程,并不是类越多越好,类的划分是为了封装,但分类的基础是抽象,具有相同属性和功能的对象的抽象集合才是类。
策略模式:定义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户。
优点,(1)减少同类的各种算法与使用算法类之间的耦合(2)简化单元测试,使每个算法都有自己的类,可以通过自己的接口单独测试。(3)对某种算法的修改,或添加新的算法,不影响现有算法类。
在分析问题时,出现了需要在不同时间应用不同的业务规则,就可以考虑使用策略模式。此时可以与创建型的模式结合起来效果更好。
感悟:
简单工厂将类的对象(实例)的创建职责从客户端和类自身中解耦出来,符合设计原则中的S(单一职责)。类自身完成自己的职责,而创建职责交给工厂类(对象)。
结合工作中遇到的问题:
系统中有一个任务执行器,一个任务可以是typeA,typeB, typeC三种类型中的一个,执行器根据不同的任务选择不同的执行逻辑(算法)。
现有代码是在执行器的类中定义3个不同的方法,在通过类型具体选择调用哪个方法。
这时,如果需要新加一种任务的类型,就要在执行器的类中新加一个方法,导致接口变化,而使客户代码需要重新编译(c++)。
解决办法:重构现有代码,使用策略模式和简单工厂。