美文网首页
设计模式·模板方法模式

设计模式·模板方法模式

作者: Chenyangqi | 来源:发表于2021-01-04 17:20 被阅读0次
    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);
        }
    }
    

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

    相关文章

      网友评论

          本文标题:设计模式·模板方法模式

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