Template Method模式和Strategy模式有何异同
来源:互联网 发布:开淘宝怎么开 编辑:程序博客网 时间:2024/06/04 20:15
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();
- }
- }
0 0
- Template Method模式和Strategy模式有何异同
- Template Method模式和Strategy模式有何异同
- Strategy模式和Template Method模式的异同浅析
- template method模式和strategy模式
- Template Method模式和Strategy模式
- Strategy、Template Method和Bridge模式
- Template Method模式与Strategy模式
- 比较Template method、Strategy和Builder模式随想
- Template模式和Strategy模式
- Template模式和Strategy模式
- 设计模式笔记(12 STRATEGY & TEMPLATE METHOD)
- 设计模式笔记(12 STRATEGY & TEMPLATE METHOD)
- 设计模式笔记(12 STRATEGY & TEMPLATE METHOD)
- Template Method与Strategy模式区别
- 设计模式笔记(12 STRATEGY & TEMPLATE METHOD)
- 【设计模式】--TEMPLATE METHOD 模式 和 STRATEGY 模式 :继承和委托
- strategy和template模式区别
- Template Method模式与Strategy模式的理解
- ANSI Common Lisp 第六章习题解
- LA 3027
- 蜗牛——矩阵顺时针遍历
- 自定义异常及其处理
- JVM如何操作缓冲区
- Template Method模式和Strategy模式有何异同
- Split()说明
- C++ MFC combo box和list control控件的使用
- java反射机制详解 及 Method.invoke解释 getMethod
- Ubuntu14.04建立WiFi热点
- LeetCode-Distinct Subsequences
- Ubuntu常见问题解决办法
- 格式化输出年月日和星期
- 好看的小说