多态

这篇博客探讨了多态在编程中的概念,强调了它将“做什么”与“谁去做,怎么做”分离的设计原则。通过举例说明,解释了多态如何允许相同的命令在不同对象上产生不同响应。此外,还讨论了多态在程序设计中的关键作用,即避免询问对象类型,简化方法调用,提高代码解耦合性。
摘要由CSDN通过智能技术生成

写在前面的话

最近在找工作的时候,觉得应该把编程原理性,基础性的知识学的扎实一点,所以系统的学了一下设计模式,主要参考书籍是:《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'

由上面可以看出,减少过程化编程中的条件分支,转化为多态性

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值