最近在学习js,因为是从java转过来的,所以有时候难免和java对比。本文就从两个语言对设计模式的应用来分析一下两个语言的优劣性。
多态性
多态性的意思是,你无需关注调用的是哪个对象,当你发出一个指令时,对象会自己根据指令,做出不同的动作。
比如,我想让不同的动物发出不同的叫声,在java中一般是通过继承来实现
public abstract class Animal{
abstract void sound();
}
public class Chicken extens Animal{
public void sound(){
sout("咯咯咯");
}
}
public class Duck extens Animal{
public void sound(){
sout("嘎嘎嘎");
}
}
public static void main(String args[]){
Aninal chicken = new Chicken();
Animal duck = new Duck();
chicken.sound(); //咯咯咯
duck.sound(); //嘎嘎嘎
}
用js的话,有几种实现方式,我们来分析一下
方法一(非多态)
var Duck = function () {};
var Chicken = function () {};
var makeSound = function ( animal ) {
if( animal instanceof Duck){
console.log("嘎嘎嘎");
}else if( animal instanceof Chicken){
console.log("咯咯咯");
}
};
makeSound(new Duck());
makeSound(new Chicken());
PS: instanof 的用法请参看官方api文档
可以看到,在这个例子中,并没有使用到多态,调用不同的方法,需要判断不同的类型,这显然是不方便的,其实我们可以修改成下面的样子:
方法二
var Duck = function () {
this.makeSound = function () {
console.log("嘎嘎嘎");
}
};
var Chicken = function () {
this.makeSound = function () {
console.log("咯咯咯");
}
};
function sound(animal) {
animal.makeSound();
}
sound(new Duck());
sound(new Chicken());
网友评论