js的设计模式

1:工厂模式
工厂模式类似于现实生活中的工厂可以产生大量相似的商品,去做同样的事情,实现同样的效果;这时候需要使用工厂模式。

简单的工厂模式可以理解为解决多个相似的问题;这也是她的优点

function work(name,sex){
        var obj=new Object();
        obj.name=name;
        obj.sex=sex;
        obj.habby=function(){
            return "追剧";
        };
        return obj;
    }
    var worker =work("fan","女");
     console.log(worker);
    console.log(worker.sex); //女
    console.log(worker.habby()); //追剧
    console.log(typeof worker);//object

优点:能解决多个相似的问题。

缺点:不能知道对象识别的问题(对象的类型不知道)。

注释:解决了创建多个对象的问题,但是没有结解决对象识别的问题(怎样知道一个对象的类型)

2:构造函数模式


    function construct(){
        this.name="谦谦";
        this.sex="女";
        this.eat=function(){
            return this.name+"吃米饭";
        }
    }
    var con=new construct ();
    console.log(con);
    console.log(con.eat());//谦谦吃米饭
    console.log(typeof con); //object

注释:没有显示的创建对象,没有返回语句,直接将属性赋给this对象,将Person的实例对象标识为一种特定的类型
缺点:每个方法在每个实例上面都需要重新定义一遍

3:原型模式

  function yuanx(){

    }
    yuanx.prototype.name="帆帆";

    yuanx.prototype.eat=function() {
        return this.name+"吃饭";
    }
    var yuan=new yuanx();
    console.log(yuan.name);//帆帆
    console.log(yuan.eat()); //帆帆吃饭

注意:省略了为构造函数传递初始化参数,结果所有实例享有相同的属性(对于函数实用,但是对于那些基本属性也说的过去,但是对于引用类型的数据就麻烦了)
基本属性我们可以在实例当中添加一个同名属性,这样可以隐藏原型当中的对应的属性,但是引用类型的属性却会导致所有实例共享

4:组合使用构造函数与原型模式

构造函数用于定义实例属性,原型上面定义共享的属性和方法

  function  ff(){
        this.name="汉中";
        this.special="面皮";
    }
    ff.prototype.view =function(){
        return this.name+"油菜花";
    }
    var f2=new ff();
    console.log(f2.view()); //汉中油菜花

5:动态原型模式

function Person(name,age,job){
    this.name = name;
    this.age = age;
    this.job = job;    
    if(typeof this.speak != "function"){
        Person.speak = function(){
            console.log(this.name);
        };
    }
}    
**

6:单例模式

 var alone=(function(){
       var newone;
       function getone(){
           if(newone==undefined){
                newone=new factory();
           }
               return newone ;
       }
       function factory(){
           this.name="lifa";
           this.sex="女";
           this.watch=function(){
               return "看电视"
           }
       }
       return{
           getone:getone
       }
   })()
    console.log(alone.getone ().sex); //女
    console.log(alone.getone ().watch()); //看电视

单例模式也称作为单子模式,单体模式。单例模式的定义是产生一个类的唯一实例,是软件设计中较为简单但是很常用的一种设计模式。
单例模式的核心是确保只有一个实例,并提供全局访问

单体模式的优点是:

可以用来划分命名空间,减少全局变量的数量。
使用单体模式可以使代码组织的更为一致,使代码容易阅读和维护。
可以被实例化,且实例化一次。

理解使用代理实现单列模式的好处:
比如我现在页面上需要创建一个div的元素,那么我们肯定需要有一个创建 div的函数,而现在我只需要这个函数只负责创建div元素,其他的它不想管,也就是想实现单一职责原则,就好比淘宝的kissy 一样,一开始的时候他们定义kissy只做一件事,并且把这件事做好,具体的单体模式中的实例化类的事情交给代理函数去处理,这样做的好处是具体的业务逻辑分开了,代理只管代理的业务逻辑,在这里代理的作用是实例化对象,并且只实例化一次; 创建div代码只管创建div,其他的不管;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值