模板类模式

作者: 姜治宇 | 来源:发表于2020-04-08 12:00 被阅读0次

模板类模式,其实就是组合继承的应用场景。我们从复杂的业务中抽象出一个基本模板作为父类,而将一些具体的东西放在子类去实现。
举个例子。
假如某项目中的弹出框样式不统一,现在要求做成统一的样式,怎么办?
你肯定不会一个一个页面去改是吧?这时你可以按照项目经理的要求,做一个统一的模板弹框类,然后具体的弹框只要继承这个模板类,即可实现样式的统一。
下面看一下具体实现。
根据要求,我们要实现的模板类需要有:
1、提示内容。
2、一个确定按钮。
3、一个关闭按钮。

var UniteAlert = function(obj){
        if(!obj)
            return;
        this.content = obj.content//提示内容
        //================创建dom节点=============//
        this.panel = document.createElement('div')
        this.contentNode = document.createElement('p')
        this.confirmBtn = document.createElement('button')
        this.closeBtn = document.createElement('span')
        //给元素添加统一样式类
        this.panel.className = 'unite-alert'
        this.confirmBtn.className = 'unite-confirm'
        this.closeBtn.className = 'unite-close'
        //追加文字信息
        this.confirmBtn.innerHTML = obj.confirmText || '确定'
        this.closeBtn.innerHTML = 'x'
        this.contentNode.innerHTML = this.content
        //按钮回调方法
        this.successMethod = obj.success || function(){}
        this.closeMethod = obj.fail || function(){}
    }
    UniteAlert.prototype = {
        //创建方法
        init:function(){
            //组装元素
            this.panel.appendChild(this.contentNode)
            this.panel.appendChild(this.confirmBtn)
            this.panel.appendChild(this.closeBtn)
            document.body.append(this.panel)
            //绑定回调方法
            this.bindCallback()
            this.showAlert()
        },
        bindCallback:function(){
            var that = this
            this.confirmBtn.onclick = function(){
                that.successMethod()
                that.hideAlert()
            }
            this.closeBtn.onclick = function(){
                that.closeMethod()
                that.hideAlert()
            }
        },
        showAlert:function(){
            this.panel.style.display = 'block'
        },
        hideAlert:function(){
            this.panel.style.display= 'none'
        }

    }

然后是具体的弹框实现,只要继承这个模板类即可。
比如带标题的弹框:

//具体的弹出框可继承这个父类
    //带有标题的弹出框
    var TitleAlert = function(obj){
        UniteAlert.call(this,obj)//继承父类属性
        //=======新增子类特有的属性============//
        this.title = obj.title
        this.titleNode = document.createElement('h3')
        this.titleNode.innerHTML = this.title
    }
    TitleAlert.prototype = new UniteAlert()//继承父类的方法
    //子类修改父类的init实现
    TitleAlert.prototype.init = function(){
        this.panel.insertBefore(this.titleNode,this.panel.firstChild)
        UniteAlert.prototype.init.call(this) // 其他逻辑跟父类的一样
    }


var tl = new TitleAlert({title:'温馨提示', content:'这是一个测试',
    success:function(){
        console.log('ok')
    },
    fail:function(){
        console.log('close')
    }
})
    tl.init()

也可能是带取消按钮的弹框:

    var CancelAlert = function(obj){
        TitleAlert.call(this,obj) // 继承带标题
        this.cancelBtn = document.createElement('button')
        this.cancelBtn.className = 'unite-cancel'
        this.cancelBtn.innerHTML = obj.cancelText || '取消'

    }
    CancelAlert.prototype = new UniteAlert()
    CancelAlert.prototype.init = function(){
        TitleAlert.prototype.init.call(this)//调用标题类的init
        this.panel.appendChild(this.cancelBtn)//带上取消方法

    }
    CancelAlert.prototype.bindCallback = function(){
        var that = this
        TitleAlert.prototype.bindCallback.call(this)
        //增加新的cancel方法
        this.cancelBtn.onclick = function(){
            that.closeMethod()
            that.hideAlert()
        }
    }
   var cl = new CancelAlert({title:'标题',content:'提示内容',
        success:function(){
        console.log('cancel ok')
        },
        fail:function(){
            console.log('cancel fail')
        }
    })
    cl.init()

相关文章

  • 模板方法模式

    [《JAVA设计模式》之模板模式(Template)] 模板方法模式是类的行为模式。准备一个抽象类,将部分逻辑以具...

  • 设计模式

    策略模式 接口 模板方法模式 抽象类 代理模式 接口

  • 设计模式之十——模板方法模式

    原文传送门 1 介绍 模板方法模式是类的行为模式。 1.1 什么是模板方法模式 模板方法模式是所有模式中最为常见的...

  • template模式

    模板模式(template) 定义 模板方法模式是类的行为模式。准备一个抽象类,将部分逻辑以具体方法以及具体构...

  • 15.工厂方法模式

    在模板方法模式中,在父类(抽象类)中定义流程,将具体实现交由子类实现,如果将模板方法模式用于生成实例对象,那么模板...

  • 16.桥梁模式

    在模板方法模式中,在父类(抽象类)中定义流程,将具体实现交由子类实现,如果将模板方法模式用于生成实例对象,那么模板...

  • 模板类模式

    模板类模式,其实就是组合继承的应用场景。我们从复杂的业务中抽象出一个基本模板作为父类,而将一些具体的东西放在子类去...

  • 模板方法模式(Template)

    本文参考自: 《JAVA设计模式》之模板模式(Template) 1. 作用 模板方法模式是类的行为模式。准备一个...

  • Java学习笔记 - 第012天

    每日要点 杂项 模板方法模式模板方法模式(GoF设计模式)使用了JAVA的继承机制,在抽象类中定义一个模板方法,该...

  • 论模板模式

    模板方法模式的实现方案比对 问题:模板方法模式的主要意义在于规范算法流程。标准的模板方法模式采用抽象类的实现方案。...

网友评论

    本文标题:模板类模式

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