模板模式
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
总结
自己之前在写一些抽象类的时候,写过模板模式的逻辑模式,现在看来,体会也更加深刻.