Template Method模式和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();
- }
- }
未完待续 ........
Template Method模式和Strategy模式有何异同的更多相关文章
- Java设计模式(18)策略模式(Strategy模式)
Strategy是属于设计模式中 对象行为型模式,主要是定义一系列的算法,把这些算法一个个封装成单独的类. Stratrgy应用比较广泛,比如,公司经营业务变化图,可能有两种实现方式,一个是线条曲线, ...
- Template Method模式和Strategy模式[继承与委托]
继承 program by difference. 通过继承,可以建立完整的软件结构分层.其中每一层都可以重用该层次以上的Code. 过度使用继承的代价是巨大的.应使用组合或者委托来替代继承. Tem ...
- Template Method(模板方法)模式
1.概述 在面向对象开发过程中,通常我们会遇到这样的一个问题:我们知道一个算法所需的关键步骤,并确定了这些步骤的执行顺序.但是某些步骤的具体实现是未知的,或者说某些步骤的实现与具体的环境相关.例子1: ...
- 模板模式与策略模式/template模式与strategy模式/行为型模式
模板模式 模版模式,又被称为模版方法模式,它可以将工作流程进行封装,并且对外提供了个性化的控制,但主流程外界不能修改,也就是说,模版方法模式中,将工作的主体架构规定好,具体类可以根据自己的需要,各自去 ...
- 设计模式之Singleton模式和Strategy模式是什么
Singleton模式 单例模式,也交单子模式,有时候系统只需要拥有一个全局对象. 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个对象被创建.这个类提供了一种访问其唯一的对象的方 ...
- 创建型模式之Strategy模式
应用场景 实现某一个功能有多种算法或者策略,我们可以根据环境或者条件的不同选择不同的算法或者策略来完成该功能.如编写排序算法,可以将这些算法写到一个类中,在该类中提供多个方法,每一个方法对应一个具体的 ...
- 策略模式(Strategy
Strategy 无论什么程序,其目的都是解决问题.而为了解决问题,我们又需要编写特定的算法.使用Strategy模式可以整体地替换算法的实现部分.能够整体地替换算法,能让我们轻松地以不同的算法去解决 ...
- Java设计模式(1)工厂模式(Factory模式)
工厂模式定义:提供创建对象的接口. 为何使用工厂模式 工厂模式是我们最常用的模式了,著名的Jive论坛,就大量使用了工厂模式,工厂模式在Java程序系统可以说是随处可见. 为什么工厂模式是如此常用?因 ...
- Java设计模式(22)命令模式(Command模式)
Command模式是最让我疑惑的一个模式,我在阅读了很多代码后,才感觉隐约掌握其大概原理,我认为理解设计模式最主要是掌握起原理构造,这样才对自己实际编程有指导作用.Command模式实际上不是个很具体 ...
随机推荐
- ACM提交,C++,G++,C,GCC的区别
今天做了一道水题,POJ-1004,水题一个,12个double类型的数求平均数 但是, #include <iostream> #include <cstdio> using ...
- 基于zepto移动4*3九宫格转奖
最近根据公司需求,要把移动端的圆形转盘抽奖,改为九宫格的形式,查找资料搞定了,纪录下demo代码. 页面的展现样式,如下 比较简单,就是红色的背景图,在这10个格子里转动 具体代码如下 html &l ...
- codeforces C. Pearls in a Row map的应用
C. Pearls in a Row time limit per test 2 seconds memory limit per test 256 megabytes input standard ...
- Codeforces Round #242 (Div. 2)C(找规律,异或运算)
一看就是找规律的题.只要熟悉异或的性质,可以秒杀. 为了防止忘记异或的规则,可以把异或理解为半加运算:其运算法则相当于不带进位的二进制加法. 一些性质如下: 交换律: 结合律: 恒等律: 归零律: 典 ...
- Java 代码复用 —— 泛型
public interface Comparable<T> { public int compareTo(T o); } 1. 接口(Comparable:可比较接口) public s ...
- Linux下markdown编辑软件 — retext 支持实时预览,存为pdf、html、ODT等
本文由Suzzz原创,发布于 http://www.cnblogs.com/Suzzz/p/4129368.html,转载请保留此声明 ReText是一个linux下的markdown和reStruc ...
- spark分区
spark默认的partition的分区数是和本机CPU的核数保持一致: bucket的数量和reduce的数量一致:buket的概念是map会将计算获得数据放到各个buket中,每个bucket和一 ...
- 应用层-day01
主流应用程序体系结构:CS结构.P2P结构. CS结构:客户-服务器体系结构.有一台总是打开的主机称为服务器,它服务来自其他许多称为客户的主机的请求. P2P体系结构:应用程序在不同的主机间链接,被称 ...
- c++11之二: 类成员变量初始化
在C++11中, 1.允许非静态成员变量的初始化有多种形式:初始化列表; 使用等号=或花括号{}进行就地的初始化. 可以为同一成员变量既声明就地的列表初始化,又在初始化列表中进行初始化,只不过初始化列 ...
- 【转】hurry_liu 大神STM32移植contiki入门之一:系统介绍和开发环境搭建
前言: 由于项目的原因,需要在LPC1788(STM32 cortex-M3)上面跑contiki. 之前没有涉及到contiki,不知其为何物.不过这个不是难事,做IT的,每每遇到新事物,都不会处理 ...