最近在學(xué)習(xí)js,因為是從java轉(zhuǎn)過來的,所以有時候難免和java對比甲馋。本文就從兩個語言對設(shè)計模式的應(yīng)用來分析一下兩個語言的優(yōu)劣性。
多態(tài)性
多態(tài)性的意思是迄损,你無需關(guān)注調(diào)用的是哪個對象定躏,當(dāng)你發(fā)出一個指令時,對象會自己根據(jù)指令芹敌,做出不同的動作痊远。
比如,我想讓不同的動物發(fā)出不同的叫聲氏捞,在java中一般是通過繼承來實現(xiàn)
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的話碧聪,有幾種實現(xiàn)方式,我們來分析一下
方法一(非多態(tài))
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文檔
可以看到液茎,在這個例子中逞姿,并沒有使用到多態(tài),調(diào)用不同的方法豁护,需要判斷不同的類型哼凯,這顯然是不方便的,其實我們可以修改成下面的樣子:
方法二
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());