设计模式·模板方法模式

1.1 定义

定义一个模板结构,将具体内容延迟到子类去实现,使得不改变这些具体的算法结构,就能够重新定义算法的执行步骤


模板方法通用类图

模板方法模式非常简单,仅仅使用到了Java的继承机制,AbstractClass称为抽象模板类,里面包括两类方法

  • 基本方法:由子类实现,并在模板方法里面使用
  • 模板方法:负责调度基本方法,可以有一个或者多个,一般使用final修饰,避免被外界复写串改
2、模板方法模式举例

在Android中我们一般会封装一个BaseActivity用来规范化setContent和初始化view和初始化数据,BaseActivity就是一个典型的抽象模板类,类图如下

BaseActivity模板方法

代码实现如下:
定义抽象模板BaseActivity

public abstract class BaseActivity extends AppCompatActivity {

    /**
     * 基本方法:设置布局Id
     *
     * @return 布局id
     */
    protected abstract int getLayoutId();

    /**
     * 基本方法:初始化View
     */
    protected abstract void initView();

    /**
     * 基本方法:初始化数据
     */
    protected abstract void initData();

    /**
     * 模板方法:一般加上final关键字防止被外界修改
     */
    public final void initActivity() {
        if (getLayoutId() > 0) {
            setContentView(getLayoutId());
        }
        initView();
        initData();
    }

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        initActivity();
    }
}

子类实现基本方法

public class MainActivity extends BaseActivity {
    private TextView mTvContent;

    @Override
    protected int getLayoutId() {
        return R.layout.activity_main;
    }

    @Override
    protected void initView() {
        mTvContent = findViewById(R.id.tvContent);
    }

    @Override
    protected void initData() {
        String content = "模拟数据11111111111222222222222333333333333";
        mTvContent.setText(content);
    }
}

总的来说模板方法模式是一种简单的但是使用场景较多的设计模式

你可能感兴趣的:(设计模式·模板方法模式)