zoukankan      html  css  js  c++  java
  • javascript设计模式和开发实践(阶段一)

    1,设计模式的作用:让人们写出可复用和可维护性高的程序,代价可能是,额外增加代码量;

    比较形象的例子:空房间里面放东西,如果日复一日的往里面扔东西,时间久了,很难找到自己想要的东西,调整也不容易,但是做一些柜子放东西,虽然前期增加了成本,但是在维护阶段带来了极大的好处。【柜子存放东西】,或许就是一种模式。

    2,所有设计模式的实现遵循一条原则:找出程序中变化的地方,并将变化封装起来。程序中不变和稳定的部分是很容易复用,所以需要封装变化的部分。

    初学者针对设计模式很容易出现“锤子理论”:当我们有一把锤子,看什么都是钉子。意思是:设计模式的深刻意图,只有结合实际项目场景灵活使用。

    3,编程语言分类:静态类型,动态类型。

    静态类型语言:在编译时候便已经确定变量的类型。动态类型语言:变量被赋值后,才具有某种类型。

    静态语言和动态语言的优缺点:静态语言明确规定了数据类型,迫使程序员按照契约来写程序,辅助程序员编写可靠性高的代码,动态语言优点是编写代码量减少,更加简洁,但是无法保证变量类型,可能在运行过程中发生跟类型相关的错误。Javascript是一门典型的动态类型语言,动态类型语言对变量类型带来了很大的宽容性。

    “鸭子类型”:如果它走起路来像鸭子,叫起来也是鸭子,那么它就是鸭子。通俗易懂的来讲:我们关注的是对象的行为,不关注对象本身。

    (我觉着这本书写的好棒,下面还有个鸭子的故事程序)

    var duck = {
        duckSinging(){
            console.log('嘎嘎嘎')
        }
    }
    var chicken = {
        duckSinging(){
            console.log('嘎嘎嘎')
        }
    }
    var choir = [];  //合唱团
    var joinChoir = function(animal){
        if(animal && typeof animal.duckSinging === 'function'){
            choir.push(animal);
            console.log('恭喜加入合唱团');
            console.log('合唱团已有成员数量:'+choir.length)
        }
    }
    joinChoir(duck);
    //恭喜加入合唱团
    //合唱团已有成员数量:1
    joinChoir(chicken);
    //恭喜加入合唱团
    //合唱团已有成员数量:2  

    对于加入合唱团的动物,无论小狗,小鸡,小猫,只要拥有duckSinging的方法,就能够加入进来。在动态类型语言的面向对象方法中,“鸭子类型”概念至关重要。

    利用“鸭子类型”思想,“面向接口编程,而不是面向实现编程”。面向接口编程,意思就是不是很关注实现,只关注接口API的输出,对象内部的变化对其他对象而言是透明的,也就是不可见的,透明的意思是:你不知道它是如何做到的,反正它就是能做到。

    var makeSound = function(animal){
        if(animal instanceof Duck){
            console.log('嘎嘎嘎')
        }else if(animal instanceof Chiken){
            console.log('咯咯咯')
        }
    }
    var Duck = function(){};
    var Chiken = function(){};
    makeSound(new Duck()); //嘎嘎嘎
    makeSound(new Chiken())  //咯咯咯
    

    上面的代码体现了“多态”,将“做什么”和“怎么做”分开,就是当我们对调用一些函数时,函数会返回不同的执行结果,这就是多态性的一种体现。

  • 相关阅读:
    HTTPS
    数字签名与数字证书
    oracle 10g 数据库与客户端冲突导致实例创建无监听问题
    javascript正则表达式提取子匹配项
    设计模式的分类
    【2020第一篇】环境问题基础知识
    【致 2020】2020
    【python】写demo 的时候,pycharm 编辑器总是提示"method XX may be static"
    sql 练习题 (二)
    【python项目】json 和dict 的区别
  • 原文地址:https://www.cnblogs.com/tangjiao/p/9835813.html
Copyright © 2011-2022 走看看