一.概述
类是对特性和行为的封装,接口和抽象类是体现差异化,通过继承来实现多态
* JAVA中的类继承抽象类的缺陷在于,两个不同的子类可能有不同的行为,而都继承一个抽象类,则表现为,一个子类分明没有某一行为,但因为继承了抽象类,它必须实现这一抽象行为,却什么也不做,这不是一个好的策略。
* 于是有了接口,同一类的不同子类因为有不同的行为,可以将所有子类共同的行为抽象出来,放在抽象父类中来继承,不同的行为在放在不同的接口中来实现,这样看来,貌似是一个很好的设计策略,其实仍有一个很大的缺陷,如果有20个子类同时具有某一接口的特性,那么这一特性要被实现20次,这将出现大量的重复设计。
* 于是,策略模式闪亮登场。将这些被大量重复的行为剥离出来,另建一个对应于原类的“行为类”,并让原类拥有一个行为类的依赖,当调用原类的某一行为时,事实上是委托其依赖的行为类上的对应的方法。
* 策略模式的好处在于,将子类中共同的行为剥离出来,放在行为类中,让子类动态的绑定行为类,多个子类具有相同的行为,就可以绑定用一个行为类,而不必全部实现某一接口。更重要的意义在于,这是一种松耦合的设计原则,采用了组合代替继承的方式。每个子类都可以动态的定制行为类
二.使用场合
1.以不同的格式保存文件;
2.以不同的算法压缩文件;
3.以不同的算法截获图象;
4.以不同的格式输出同样数据的图形,比如曲线 或框图bar 等。
三。应用实例:
1.对策略对象定义一个公共接口。
2.编写策略类,该类实现了上面的公共接口。
3.在使用策略对象的类中保存一个对策略对象的引用。
4.在使用策略对象的类中,实现对策略对象的set和get方法。
在Swing边框的例子中,公共接口是javax.swing.Border。策略类是LineBorder、EtchedBorder、HandleBorder等。而使用策略对象的类是JComponent。
类是对特性和行为的封装,接口和抽象类是体现差异化,通过继承来实现多态
* JAVA中的类继承抽象类的缺陷在于,两个不同的子类可能有不同的行为,而都继承一个抽象类,则表现为,一个子类分明没有某一行为,但因为继承了抽象类,它必须实现这一抽象行为,却什么也不做,这不是一个好的策略。
* 于是有了接口,同一类的不同子类因为有不同的行为,可以将所有子类共同的行为抽象出来,放在抽象父类中来继承,不同的行为在放在不同的接口中来实现,这样看来,貌似是一个很好的设计策略,其实仍有一个很大的缺陷,如果有20个子类同时具有某一接口的特性,那么这一特性要被实现20次,这将出现大量的重复设计。
* 于是,策略模式闪亮登场。将这些被大量重复的行为剥离出来,另建一个对应于原类的“行为类”,并让原类拥有一个行为类的依赖,当调用原类的某一行为时,事实上是委托其依赖的行为类上的对应的方法。
* 策略模式的好处在于,将子类中共同的行为剥离出来,放在行为类中,让子类动态的绑定行为类,多个子类具有相同的行为,就可以绑定用一个行为类,而不必全部实现某一接口。更重要的意义在于,这是一种松耦合的设计原则,采用了组合代替继承的方式。每个子类都可以动态的定制行为类
二.使用场合
1.以不同的格式保存文件;
2.以不同的算法压缩文件;
3.以不同的算法截获图象;
4.以不同的格式输出同样数据的图形,比如曲线 或框图bar 等。
三。应用实例:
1.对策略对象定义一个公共接口。
2.编写策略类,该类实现了上面的公共接口。
3.在使用策略对象的类中保存一个对策略对象的引用。
4.在使用策略对象的类中,实现对策略对象的set和get方法。
在Swing边框的例子中,公共接口是javax.swing.Border。策略类是LineBorder、EtchedBorder、HandleBorder等。而使用策略对象的类是JComponent。