Template Method模式和Strategy模式有何异同
Template Method模式很容易理解,就是由基类提供一个模板,将各子类中不变的行为提取到基类中实现,而各子类中可变的行为则由各子类自己重写基类方法实现.
Strategy则是在使用策略模式的应用实例内部维护一个策略实例,针对不同的子类用不同的策略实现.
来看看两者的代码实现:
Template Method模式 -- 基类
Template Method模式 -- 子类A
Template Method模式 -- 子类B
Template Method模式 -- 测试类
Strategy模式 -- 策略接口
Strategy模式 -- 策略A
Strategy模式 -- 策略B
Strategy模式 -- 应用
Strategy模式 -- 测试类
未完待续 ........
Strategy则是在使用策略模式的应用实例内部维护一个策略实例,针对不同的子类用不同的策略实现.
来看看两者的代码实现:
Template Method模式 -- 基类
- package com.dzeay.pattern.template_method;
- public class BaseTemplate {
- public void doSameThing() {
- System.out.println("BaseTemplate.doSameThing");
- }
- public void doOtherThing() {
- System.out.println("BaseTemplate.BaseTemplate");
- }
- }
Template Method模式 -- 子类A
- package com.dzeay.pattern.template_method;
- public class AClass extends BaseTemplate {
- @Override
- public void doOtherThing() {
- System.out.println("AClassImpl.doOtherThing");
- }
- }
Template Method模式 -- 子类B
- package com.dzeay.pattern.template_method;
- public class BClass extends BaseTemplate {
- @Override
- public void doOtherThing() {
- System.out.println("BClassImpl.doOtherThing");
- }
- }
Template Method模式 -- 测试类
- package com.dzeay.pattern.template_method;
- /**
- * <pre>
- * Template Method(模板方法模式)详解:
- * 由基类提供一个模板,将各子类中不变的行为提取到基类中实现,
- * 而各子类中可变的行为由各子类自己重写基类方法实现
- * </pre>
- *
- * @author <a href="mailto:dzeay.com@gmail.com">dzeay.com</a>
- * @since 2010-11-15
- * @version 1.0
- */
- public class TestClass {
- /**
- *
- * @param args
- */
- public static void main(String[] args) {
- BaseTemplate aClass = new AClass();
- aClass.doSameThing();
- aClass.doOtherThing();
- BaseTemplate bClass = new BClass();
- bClass.doSameThing();
- bClass.doOtherThing();
- }
- }
Strategy模式 -- 策略接口
- package com.dzeay.pattern.strategy;
- public interface IStrategy {
- public void doOtherThing();
- }
Strategy模式 -- 策略A
- package com.dzeay.pattern.strategy;
- public class AStrategy implements IStrategy {
- @Override
- public void doOtherThing() {
- System.out.println("AStrategy.doOtherThing");
- }
- }
Strategy模式 -- 策略B
- package com.dzeay.pattern.strategy;
- public class BStrategy implements IStrategy {
- @Override
- public void doOtherThing() {
- System.out.println("BStrategy.doOtherThing");
- }
- }
Strategy模式 -- 应用
- package com.dzeay.pattern.strategy;
- public class Context {
- private IStrategy strategy;
- public Context() {
- }
- public Context(IStrategy strategy) {
- this.strategy = strategy;
- }
- public void doOtherThing() {
- this.strategy.doOtherThing();
- }
- public void setStrategy(IStrategy strategy) {
- this.strategy = strategy;
- }
- }
Strategy模式 -- 测试类
- package com.dzeay.pattern.strategy;
- /**
- * <pre>
- * Strategy(策略模式)详解:
- * 在使用策略模式的应用实例内部维护一个strategy实例,针对不同的子类用不同的策略实现
- * </pre>
- *
- * @author <a href="mailto:dzeay.com@gmail.com">dzeay.com</a>
- * @since 2010-11-15
- * @version 1.0
- */
- public class TestClass {
- /**
- * @param args
- */
- public static void main(String[] args) {
- Context context = new Context();
- context.setStrategy(new AStrategy());
- context.doOtherThing();
- context.setStrategy(new BStrategy());
- context.doOtherThing();
- context.setStrategy(new IStrategy() {
- @Override
- public void doOtherThing() {
- System.out.println("doOtherThing");
- }
- });
- context.doOtherThing();
- }
- }
未完待续 ........