模板方法模式

模板方法模式会将模板方法以及不需要随业务场景变化的基本方法放到父类中实现,随业务场景变化的基本方法会被定义为抽象方法,由子类提供真正的实现。

下图展示了模板方法模式的核心类,其中 template() 方法是我们上面描述的模板方法,part1() 方法和 part3() 方法是逻辑不变的基本方法实现,而 part2()、part4() 方法是两个随场景变化的基本方法。

 

        我们可以通过模板方法控制整个流程的走向以及其中固定不变的步骤,子类来实现流程的某些变化细节,这就实现了“变化与不变”的解耦,也实现了“整个流程与单个步骤”的解耦。当业务需要改变流程中某些步骤的具体行为时,直接添加新的子类即可实现,这也非常符合“开放-封闭”原则。另外,模板方法模式能够充分利用面向对象的多态特性,在系统运行时再选择一种具体子类来执行完整的流程,这也从另一个角度提高了系统的灵活性。

示例:

定义模板类

public abstract class Game {

    abstract void initialize();
    abstract void startPlay();
    abstract void endPlay();

    //前提条件
    private void premise() {
        System.out.println("When I have free time");
    }

    public final void play() {
        premise();

        //初始化游戏
        initialize();

        //开始游戏
        startPlay();

        //结束游戏
        endPlay();
    }
}
public class BasketballGame  extends Game {
    @Override
    void initialize() {
        System.out.println("Basketball game initialize...");
    }

    @Override
    void startPlay() {
        System.out.println("Basketball Game Started.Enjoy the game!");
    }

    @Override
    void endPlay() {
        System.out.println("Basketball Game Over!");
    }
}
public class FootballGame extends Game {
    @Override
    void initialize() {
        System.out.println("Loading...");
        System.out.println("Football Game Initialized! Start playing.");
    }

    @Override
    void startPlay() {
        System.out.println("Football Game Started. Enjoy the game!");
    }

    @Override
    void endPlay() {
        System.out.println("Football Game Finished!");
    }
}

测试:

public class Test {
    public static void main(String[] args) {
        Game game = new BasketballGame();
        game.play();

        System.out.println("==================================");
        Game game1 = new FootballGame();
        game1.play();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值