多态
来源:互联网 发布:android应用程序优化 编辑:程序博客网 时间:2024/06/05 08:21
写在前面的话
最近在找工作的时候,觉得应该把编程原理性,基础性的知识学的扎实一点,所以系统的学了一下设计模式,主要参考书籍是:《javascript设计模式与开发实践》,写下博客是对书中我认为比较重要的内容的一个提炼,然后自己做个总结;以下:
什么是多态
多态:同一个操作应用到不同的对象上,可以产生不同的解释和执行结果,多态背后的思想是将“做什么”和“谁去做,怎么做”分开,其中“做什么”是不变的部分,“谁去做和怎么做”是可变的部分,是细节;
比如: 主人给动物们发布一个命令“叫”,然后猫发出“喵喵喵”的叫声,狗发出“汪汪汪”的叫声;这其中主人的命令“叫”就是一个不变的部分,是“做什么”,猫、狗的叫是可变的部分,是“谁去做,怎么做”;
// 对象中多态的实现:var makeSound = function (animate){ animate.sound();}var Dog = function(){};Dog.prototype.sound = function(){ console.log("汪汪汪");}var Cat = function(){};Cat.prototype.sound = function(){ console.log("喵喵喵");}makeSound(new Dog()); // 汪汪汪makeSound(new Cat()); // 喵喵喵
多态在程序设计中的作用
其实多态最根本的好处是,不必询问“你是什么类型”而根据得到的答案调用对象的某个行为;你只需要调用就可以,其他的事情,多态机制为你解决;
举个栗子:封装一个“做什么”的方法,这个方法是说出某个指定人的名字
// 原始写法var person1 = { sayName: function(){ console.log("I am person1"); }}var person2 = { sayName: function(){ console.log("I am person2"); }}function sayName(type){ if (type == 'person1'){ person1.sayName(); } else if (type == 'person2'){ person2.sayName(); }}sayName('person1');
以上是没利用多态的原始写法,为了让特定的人说出名字,需要在sayName方法内部判断人的类型,如果新添加了人,又需要继续在sayName里面添加判断方法;这样导致,sayName是可变的,可能会越来越臃肿,然而利用多态的思想可以让它是固定的,解耦合;
// 多态的写法var person1 = { sayName: function(){ console.log("I am person1");// 'I am person1' }}var person2 = { sayName: function(){ console.log("I am person2"); }}function sayName(person){ if (typeof person.sayName == 'function'){ person.sayName(); }}sayName(person1);// 'I am person1'
由上面可以看出,减少过程化编程中的条件分支,转化为多态性
阅读全文
0 0
- 多态
- 多态
- 多态
- 多态
- 多态
- 多态
- 多态
- 多态
- 多态
- 多态
- 多态
- 多态
- 多态
- 多态
- 多态
- 多态
- 多态
- 多态
- Binex
- 矩阵的物理意义
- java类集---ListItertor接口
- Leetcode||33. Search in Rotated Sorted Array
- Java排序算法——直接选择排序
- 多态
- PRD中一段的解读
- Linux C/C++编程一站式学习--以可视化的形式打印直方图
- 【二分+LCA差分乱搞】BZOJ4326(UOJ150) NOIP2015 运输计划
- Unity3D各平台Application.xxxPath的路径
- 数据库之MySQL增删改查记录
- Android Studio 中关于 ButterKnife的配置及使用
- [POJ 1041] John's trip Fleury算法求欧拉回路
- 2017美团北京java后台开发