栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > Web开发 > JavaScript

模板方法模式

JavaScript 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

模板方法模式

模板方法模式

将不变的部分封装在父类中,而可变的部分则通过子类继承并进行扩展,就叫做模板方法模式。

使用场景

我们在使用UI框架的时候,可能会注意到:框架中的很多组件,比如按钮、提示框等,样式比较统一:

如果现在让我们去制作截图中的两种提示框,或者更多类似的提示框,我们完全可以抽象出一个最基础、最简单的一个提示框, 而其他的只要在此基础上增加一些功能即可。

首先,我们写一个最基础的提示框,它应该包括提示内容和一个确认按钮:

例子:


  .alert_style {
    width: 33%;
    border: 1px solid rgb(255, 152, 0);
    text-align: center;
    margin: 0 auto;
  }


// 创建基本提示框
let alert = function (data) {
  // 创建提示框的容器
  this.containerNode = document.createElement('div');
  this.containerNode.className = 'alert_style';

  // 创建提示内容的节点与文本
  this.contentNode = document.createElement('p');
  this.contentNode.innerHTML = data.content || '';

  // 创建确认按钮的节点、文本与回调
  this.confireBtnNode = document.createElement('button');
  this.confireBtnNode.innerHTML = data.confireBtnTxt || '确认';
  this.confireCallBack = data.confireCallBack || function () {};
};

// 创建基本方法
alert.prototype = {
  // 初始化提示框
  init() {
    this.containerNode.appendChild(this.contentNode);
    this.containerNode.appendChild(this.confireBtnNode);
    this.confireBtnNode.onclick = () => {
      this.confireCallBack();
      this.hide();
    };
    document.body.appendChild(this.containerNode);
    this.hide();
  },

  // 隐藏提示框
  hide() {
    this.containerNode.style.display = 'none';
  },

  // 显示提示框
  show() {
    this.containerNode.style.display = 'block';
  },
};

// 测试基础提示框
let panel = new alert({
  content: '基础框',
  confireBtnTxt: 'ok',
  confireCallBack() {
    alert('true');
  },
});
panel.init();
panel.show();

接下来,如果我们想创建一个带有取消按钮的提示框,那么在此基础上,只需要进行拓展即可。

例子:

let Cancelalert = function (data) {
  // 继承基本提示框
  alert.call(this, data);

  // 创建取消按钮的节点、文本与回调
  this.cancelBtnNode = document.createElement('button');
  this.cancelBtnNode.innerHTML = data.cancelBtnTxt || '取消';
  this.cancelCallBack = data.cancelCallBack || function () {};
};

// 继承基本提示框的方法
Cancelalert.prototype = Object.create(alert.prototype);

// 重写基本提示框的init方法
Cancelalert.prototype.init = function () {
  alert.prototype.init.call(this);
  this.containerNode.appendChild(this.cancelBtnNode);
  this.cancelBtnNode.onclick = () => {
    this.cancelCallBack();
    this.hide();
  };
};

// 测试带有取消按钮的提示框
let panel = new Cancelalert({
  content: '带有取消按钮的框',
  confireBtnTxt: 'ok',
  cancelBtnTxt: 'no',
  confireCallBack() {
    alert('true');
  },
  cancelCallBack() {
    alert('false');
  },
});
panel.init();
panel.show();


如有错误,欢迎指正,本人不胜感激。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/243775.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号