一、封装变化
找出应用中可能需要变化之处,把它们独立出来,不要和那些不需要变化的代码混在一起。
引入背景:
在策略模式一章中,同一个“鸭子”基类,会有“绿头鸭”、“红头鸭”、“橡皮鸭”、“诱饵鸭”等多个子类。
而对于飞行(fly)这一行为来说,“绿头鸭”、“红头鸭”等代表的真实鸭子有统一的飞行行为,而“橡皮鸭”、“诱饵鸭”等代表的假鸭子的飞行行为空。
如果每个子类的行为都是不同的,那用继承来实现是合理且优雅的;但遇到像这种:子类的某一个行为不尽相同,那用继承就会造成有相同行为的子类里存在重复的代码,造成代码难以维护。
这时就需要把这几类会变化的地方抽象出来,实现多个不同的“算法”,比如上例的真鸭“能飞”的行为和假鸭子“不能飞”的行为。然后实现方式由继承改为组合,在子类的构造器中“静态指定”具体使用那个“实现算法”。这就是策略模式!
适用范围:
某一方法有两种或多种不同的“算法”实现方式。
每一种“算法”都有多个类去实现。
简单的讲,就是“实现方式”和“类”的关系犹如一张“二分图”一样有一(一种算法实现)对多(多个实现该方法的类)关系时。
评论
发表评论