`
leayer
  • 浏览: 61906 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Template Method模式和Strategy模式有何异同

阅读更多
Template Method模式很容易理解,就是由基类提供一个模板,将各子类中不变的行为提取到基类中实现,而各子类中可变的行为则由各子类自己重写基类方法实现.
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();
    }
}


未完待续 ........
分享到:
评论

相关推荐

    24种设计模式以及混合设计模式

    如策略模式(Strategy)、模板方法模式(Template Method)、观察者模式(Observer)、命令模式(Command)、迭代器模式(Iterator)、访问者模式(Visitor)、备忘录模式(Memento)、状态模式(State)、职责链...

    设计模式那点事

    包括责任链模式(Chain of Responsibility)、命令模式(Command)、解释器模式(Interpreter)、迭代器模式(Iterator)、备忘录模式(Memento)、观察者模式(Observer)、状态模式(State)、策略模式(Strategy...

    您的设计模式.pdf。

    本书《您的设计模式》对设计模式进行了详细的讲解,涵盖了策略模式、代理模式、单例模式、多例模式、工厂方法模式、抽象工厂模式、门面模式、适配器模式、模板方法模式、建造者模式、桥梁模式、命令模式、装饰模式、...

    设计模式相关文档和部分模式源代码

    行为型模式涉及对象间的职责分配,如观察者模式(Observer)、策略模式(Strategy)、命令模式(Command)以及模板方法模式(Template Method),这些模式让代码更具灵活性和可扩展性。 在C++中实现设计模式,需要...

    常见的十种设计模式Java工程文件

    2. **Template Method模式**:Template Method模式定义了一个操作中的算法骨架,而将一些步骤延迟到子类中。它使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 3. **Command模式**:Command模式...

    JAVA设计模式(中文).chm与设计模式.chm

    例如策略模式(Strategy)、模板方法模式(Template Method)、观察者模式(Observer)、责任链模式(Chain of Responsibility)、命令模式(Command)、迭代器模式(Iterator)、中介者模式(Mediator)、备忘录...

    设计模式之美—学习笔记

    模板方法模式(Template Method)定义了操作中的算法骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。命令模式(Command)将请求封装为一个对象,以便使用不同的...

    设计模式源码

    包括责任链模式(Chain of Responsibility)、命令模式(Command)、解释器模式(Interpreter)、迭代器模式(Iterator)、中介者模式(...Strategy)、模板方法模式(Template Method)和访问者模式(Visitor)...

    PHP设计模式

    常见的行为型模式包括责任链模式(Chain of Responsibility)、命令模式(Command)、解释器模式(Interpreter)、迭代器模式(Iterator)、...Strategy)、模板方法模式(Template Method)和访问者模式(Visitor)...

    java与模式光盘源码

    行为型模式如观察者(Observer)、模板方法(Template Method)和策略(Strategy)等,关注对象之间的交互和责任分配。 在Java与模式的光盘源码中,你可以找到这些模式的实际应用示例,这对于学习和掌握设计模式至...

    C++设计模式.pdf

    Template Method模式定义了一个操作中的算法骨架,而将一些步骤延迟到子类中,使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。 #### Strategy模式 Strategy模式定义了一系列的算法,并将每一个...

    java设计模式中英文各种版本打包下载 学习设计模式必备材料

    如策略模式(Strategy)、模板方法模式(Template Method)、观察者模式(Observer)、迭代器模式(Iterator)、责任链模式(Chain of Responsibility)、命令模式(Command)、备忘录模式(Memento)、解释器模式...

    《java设计模式》课后习题模拟试题解答——刘伟.zip

    3. **行为型模式**:包括策略(Strategy)、模板方法(Template Method)、观察者(Observer)、迭代器(Iterator)、访问者(Visitor)、责任链(Chain of Responsibility)、命令(Command)、备忘录(Memento)、...

    设计模式迷你手册最新

    3. **行为型模式**:这类模式涉及对象之间的交互和责任分配,如策略模式(Strategy)、模板方法模式(Template Method)、观察者模式(Observer)、命令模式(Command)、迭代器模式(Iterator)、访问者模式...

    设计模式精解-pdf.zip

    例如命令模式(Command)、解释器模式(Interpreter)、迭代器模式(Iterator)、备忘录模式(Memento)、观察者模式(Observer)、状态模式(State)、策略模式(Strategy)、模板方法模式(Template Method)和...

    JAVA设计模式-chm版

    包括责任链模式(Chain of Responsibility)、命令模式(Command)、解释器模式(Interpreter)、迭代器模式(Iterator)、中介者模式(...Strategy)、模板方法模式(Template Method)和访问者模式(Visitor)...

    设计模式那点事_软件小蜜

    行为型模式主要关注对象间的交互和责任分配,包括策略模式(Strategy)、模板方法模式(Template Method)、观察者模式(Observer)、命令模式(Command)和迭代器模式(Iterator)等。这些模式有助于处理算法的封装...

    设计模式23种类图

    - 模板方法模式(Template Method):定义一个操作中的算法骨架,而将一些步骤延迟到子类中。 - 访问者模式(Visitor):为一个对象结构定义一个作用在其上的操作。 这些设计模式的彩图和截图可能是为了直观地...

    经典的设计模式的书籍 <<设计模式>>

    除了MVC和工厂模式,《设计模式》一书还探讨了其他重要模式,如单例模式(Singleton)、建造者模式(Builder)、观察者模式(Observer)、装饰器模式(Decorator)、代理模式(Proxy)、享元模式(Flyweight)、桥接...

    23种设计模式总结及案例.pdf

    包括命令模式(Command)、解释器模式(Interpreter)、迭代器模式(Iterator)、备忘录模式(Memento)、观察者模式(Observer)、状态模式(State)、策略模式(Strategy)、模板方法模式(Template Method)、...

Global site tag (gtag.js) - Google Analytics