zoukankan      html  css  js  c++  java
  • Javascript设计模式-模板方法模式

    模板方法定义了一个操作中的算法的骨架,而将一些步骤延迟到子类中。模板方法使得子类可以不改变一个算法的结构即可重定义该算法的某些特定步骤。

    模板方法是一种代码复用的基本技术,在类库中尤为重要,因为他们提取了类库中的公共行为。模板方法导致一种反向的控制结构,这种结构就是传说中的“好莱坞法则”,即“别找找我们,我们找你”,这指的是父类调用一个类的操作,而不是相反。具体体现是面向对象编程编程语言里的抽象类(以及其中的抽象方法),以及继承该抽象类(和抽象方法)的子类。

    案例:我有一系列的活动,比如满减、满赠、包邮等活动,在执行活动前后有一些逻辑需要处理,我们可以将这些逻辑封装的父类中,活动类只需要处理当前活动的逻辑即可

    活动基类:

    var ActiveBase=function(){
        this.resultPrice=0;
    };
    ActiveBase.prototype.checkProductPrice=function(){
        console.info("检查产品价格");
    };
    ActiveBase.prototype.checkProductCount=function(){
        console.info("检查产品数量");
    };
    ActiveBase.prototype.isExecute=function(){/*是否执行活动,可以重写*/
        return true;
    };
    ActiveBase.prototype.activeRule=function(){/*活动规则,必须重写*/
        console.info("该方法必须重写");
    };
    ActiveBase.prototype.execute=function(){/*执行活动*/
        console.info("开始执行活动");
        this.checkProductPrice();
        this.checkProductCount();
        if (this.isExecute()) {
            this.activeRule();
        }
    };

    优惠券活动:

    var CouponActive=function(){
        ActiveBase.apply(this);
    };
    CouponActive.prototype = new ActiveBase();
    
    CouponActive.prototype.activeRule = function(){
        console.info("======执行活动=======");
        this.resultPrice=20;
    };
    CouponActive.prototype.isExecute=function(){return true;};

    客户端:

    var couponActive = new CouponActive();
    couponActive.execute();
    console.info("价格:"+couponActive.resultPrice);

    控制台输出:

    开始执行活动
    检查产品价格
    检查产品数量
    ======执行活动=======
    价格:20
  • 相关阅读:
    SSL证书的生成方法
    某些系统文件破坏后的修复方式
    dd命令的使用简介
    浅谈访问控制列表(ACL)
    发送端usleep(900)单线程带宽
    1024个读出线程的测试结果
    寻找ROS取数的瓶颈:思路整理(2)
    ROS:32个接收进程的接收带宽
    ROS: 将接收端的接收函数注释掉,TCP只发送,不接受数据时的recv-Q和send-Q长度实验
    ROS:16个接收进程的接收带宽
  • 原文地址:https://www.cnblogs.com/fanfan-90/p/12797230.html
Copyright © 2011-2022 走看看