Template Method模式和Strategy模式有何异同
来源:互联网 发布:博士后 国外知乎 编辑:程序博客网 时间:2024/05/29 19:35
Template Method模式和Strategy模式有何异同
- 博客分类:
- 设计模式
Java
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模式的理解
- 第二十五讲:委托与事件实例浅析
- C语言字符串相关库函数的实现strcpy、memcpy、strncpy、strcat、strncpy、memset、memcpy、strcpy
- 第三周作业——冒泡排序
- 文件和目录的区别
- 003_014 Python 简单加法器
- Template Method模式和Strategy模式有何异同
- PHP与WCF第一次亲密接触
- 基于OpenLayer的前端Aspx标记用法
- Convert Sorted Array to Binary Search Tree
- struts2错误java.lang.NoSuchMethodException: ...XXXAction.create()或者从页面到Action时找不到Action
- HTML 块级元素/内联元素
- Windows 8: Enable .NET Framework 3.5 (includes .NET 2.0 and 3.0) feature in Online & Offline mode!
- zoj 2928 Mathematical contest in modeling( 爬山 )
- Yarn中的ResourceManager分析