设计模式--[8]模板模式

模板模式

asynctask 就是模板模式

定义:

定义一个操作流程的骨架,然后将一些步骤的具体实现放到子类中.

意图

有一些共用的方法,却在每一个子类都要重写这一方法.

实现流程

1.抽象类中定义抽象方法,a,b,c.
2.抽象类中定义一个final方法,方法体为a,b,c的组合.
3.子类继承抽象类,并重写抽象方法.

应用举例

android中的Asynctask是一个抽象类,其中prepare,background,post三个方法.都是按照顺序执行.

优点

1.封装不变部分,扩展可变部分.
2.提取公共代码,便于维护.
3.行为由父类控制,子类实现.

使用场景

有多个子类,且逻辑相同.例如在BaseActivity中进行相应的初始化操作.

代码实现

1.抽象类

public abstract class Game {


    public abstract void initGame();
    public abstract void startGame();
    public abstract void endGame();


    public final void play(){
        initGame();
        startGame();
        endGame();
    }

}

2.实现类


public class FootballGame extends Game{

    @Override
    public void initGame() {
        // TODO Auto-generated method stub
        System.out.println("FootballGame initGame");
    }

    @Override
    public void startGame() {
        // TODO Auto-generated method stub
        System.out.println("FootballGame startGame");
    }

    @Override
    public void endGame() {
        // TODO Auto-generated method stub
        System.out.println("FootballGame endGame");
    }

}
public class BasketballGame  extends Game{

    @Override
    public void initGame() {
        // TODO Auto-generated method stub
        System.out.println("BasketballGame initGame");
    }

    @Override
    public void startGame() {
        // TODO Auto-generated method stub
        System.out.println("BasketballGame startGame");

    }

    @Override
    public void endGame() {
        // TODO Auto-generated method stub
        System.out.println("BasketballGame endGame");

    }

}


3.测试类


public class Test {
    public static void main(String[] args) {

        Game game =new BasketballGame();
        game.play();

    }
}
BasketballGame initGame
BasketballGame startGame
BasketballGame endGame


总结

自己之前在写一些抽象类的时候,写过模板模式的逻辑模式,现在看来,体会也更加深刻.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值