浅谈Android移动架构(八)行为模式之模板模式

今天谈模板模式:使用非常广泛,但理解很简单.可以说就是抽象方法实现一样.

定义:

一个操作中的算法框架,而将一些步骤延迟到子类中,使得子类不改变算法的结构即可重复定义算法的某些特点步骤.

简单分析

一般包含角色:
AbstractClass抽象类:定义算法结构,还可以提供通用实现.
ConcreteClass具体实现类:选择性的重定义算法中某些特定步骤.


浅谈Android移动架构(八)行为模式之模板模式_第1张图片
模板模式.png
简单实现

抽象类

public abstract class Game {
       abstract void initialize();
       abstract void startPlay();
       abstract void endPlay();
       
       
       public final void play()
       {
              System.out.println("游戏开机");
              //初始化游戏
              initialize();

              //开始游戏
              startPlay();

              //结束游戏
              endPlay();
              
              System.out.println("游戏关机");
           
       }
}

具体实现类

public class LoLGame extends Game{

    @Override
    void initialize() {
        System.out.println("初始化英雄联盟");
    }

    @Override
    void startPlay() {
        System.out.println("攻入敌方战场");
    }

    @Override
    void endPlay() {
        System.out.println("每打赢,失败,退出游戏");
    }

}

执行

public class Client {
    public static void main(String[] args) {
        Game game=new LoLGame();
        game.play();
    }
}

多简单,所有的游戏机都要看关机,但玩不同游戏会有不同的玩发,就是这样实现的.

Android中实例

就是AsyncTask.
在使用AsyncTask时,我们都有知道耗时的方法要放在doInBackground(Params... params)中,在doInBackground之前如果还想做一些类似初始化的操作可以写在onPreExecute方法中,当doInBackground方法执行完成后,会执行onPostExecute方法,而我们只需要构建AsyncTask对象,然后执行execute方法即可。我们可以看到,它整个执行过程其实是一个框架,具体的实现都需要子类来完成。而且它执行的算法框架是固定的,调用execute后会依次执行onPreExecute,doInBackground,onPostExecute,当然你也可以通过onProgressUpdate来更新进度。
#######解决的问题
一些方法通用,却在每一个子类都重新写了这一方法。

优缺点

优点: 1、封装不变部分,扩展可变部分。 2、提取公共代码,便于维护。 3、行为由父类控制,子类实现。
缺点:每一个不同的实现都需要一个子类来实现,导致类的个数增加,使得系统更加庞大。
模板方法会带来代码阅读的难度,会让心觉得难以理解。

使用场景

1.有多个子类共有的方法,且逻辑相同
2.重要的、复杂的方法,可以考虑作为模板方法。

注意

为防止恶意操作,一般模板方法都加上 final 关键词.

其他模式继续更新......

你可能感兴趣的:(浅谈Android移动架构(八)行为模式之模板模式)