模板模式

作者: Chauncey_Chen | 来源:发表于2017-01-05 14:44 被阅读24次

    模板模式

    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
    
    

    总结

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

    相关文章

      网友评论

        本文标题:模板模式

        本文链接:https://www.haomeiwen.com/subject/oqjzvttx.html