设计模式

1.单例模式

var person ;
(function(){
    var instance ;
    person = function Person(){
        if(instance){
            return instance;
        }
        instance = this;
    }
     
    return getInstance;
})();

2.迭代器

var counter = (function(){
    var index = 0;
    var dataArray = [1,3,2,3,4,4,2,2];
    var length = dataArray.length;
    return {
        length:length,
        hasNext:function(){
            return index

3.装饰模式
可以在运行时候添加附加功能到对象中,他的一个方便特征在于其预期行为的可定制和可配置特性。

例子 假设在开发一个销售商品的Web应用,每一笔信销售都是一个人新的 sale 对象。该对象“知道”有关项目的价格,并可以通过 getPrice() 方法返回加个。
根据不同情况,可以用额外的功能装饰此对象。
假设客户在魁北克省,买房需要支付联邦税和魁北克省税,则此时需要调用联邦税装饰者和魁北克省税装饰者。

var sale=new Sale(100);
sale=sale.decorate("fedtax"); //联邦税
sale=sale.decorate("quebec"); //魁北克省税
sale=sale.decorate("miney"); //转为美元格式
sale.getPrice(); //返回价格
并且装饰是可选的,例如不再魁北克省有可能没有省税。

function Sale(price){
    this.price = price;
    this.decoreteList = [];
}

Sale.prototype.decorate = function(decorator){
    this.decoreteList.push(decorator);
}

Sale.prototype.getPrice = function(){
    this.decoreteList.map((item,index)=>{
        this.decorate[item].getPrice.apply(this);
    })
    console.log(this.price);
}

Sale.prototype.decorate['fedtax'] = {
    getPrice:function(){
        this.price = this.price*0.7;
    }
}

Sale.prototype.decorate['quebec'] = {
    getPrice:function(){
        this.price = this.price*0.8;
    }
}

Sale.prototype.decorate['money'] = {
    getPrice:function(){
        this.price = this.price*0.9;
    }
}

策略模式

策略模式支持在运行时候选择算法。例如用在表单验证问题上,可以创建一个具有 validate() 方法的验证器对象,无论表单具体类型是什么,该方法都会被调用,
并且返回结果或者错误信息。

你可能感兴趣的:(设计模式)