1.定义:
定义了算法族,分别封装起来,让它们之间可以互相替换。
此模式让算法的变化独立于使用算法的客户。
2.实现方式:
在客户类中以组合的方式,将算法族的抽象父类作为该类数据成员A。在使用算法时,委托给A。
3.体现的OO原则:
封装变化:
算法族是客户类的属性之一,因为该属性在发展中很容易发生变化,所以将这一变化从客户的属性中抽离出来了。
多用组合,少用继承:
本来算法族是客户类的属性之一,采用继承的方式派生出子类去,实现父类的方法也能够实现该功能,可是这样做的最大缺点是无法知道所有的算法,随着需求的变化,有着算法的增加也很正常的。使用组合建立系统具有很大的弹性,不仅可将算法族封装成类,更可以运行时动态地改变行为,只要组合的行为对象符合正确的接口标准即可。
针对接口口编程,不针对实现编程:
客户使用算法族的抽象父类,所以实现就不会绑死在客户类中。
开始针对实现,所以实现就会绑死在客户类中。
定义了算法族,分别封装起来,让它们之间可以互相替换。
此模式让算法的变化独立于使用算法的客户。
2.实现方式:
在客户类中以组合的方式,将算法族的抽象父类作为该类数据成员A。在使用算法时,委托给A。
3.体现的OO原则:
封装变化:
算法族是客户类的属性之一,因为该属性在发展中很容易发生变化,所以将这一变化从客户的属性中抽离出来了。
多用组合,少用继承:
本来算法族是客户类的属性之一,采用继承的方式派生出子类去,实现父类的方法也能够实现该功能,可是这样做的最大缺点是无法知道所有的算法,随着需求的变化,有着算法的增加也很正常的。使用组合建立系统具有很大的弹性,不仅可将算法族封装成类,更可以运行时动态地改变行为,只要组合的行为对象符合正确的接口标准即可。
针对接口口编程,不针对实现编程:
客户使用算法族的抽象父类,所以实现就不会绑死在客户类中。
开始针对实现,所以实现就会绑死在客户类中。