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
  • 相关阅读:
    详解ABBYY FineReader 12内置的自动化任务
    提高OCR质量的技巧之区域未正确检测
    详解CorelDRAW中如何合并与拆分对象
    详解CorelDRAW中关于群组的操作
    CorelDRAW中关于锁定与解锁对象的操作
    CorelDRAW中如何分布对象
    CorelDRAW中如何复制对象属性详解
    CorelDRAW中如何再制对象详解
    CorelDRAW中六种复制对象的方法详解
    CentOS执行ping命令报错 name or service not know
  • 原文地址:https://www.cnblogs.com/fanfan-90/p/12797230.html
Copyright © 2011-2022 走看看