หลังจากกลับมาบ้าน และส่งลูกเข้านอนหมดแล้ว เพื่อแก้ข้อสงสัยที่ฟังมา ก็เลยต้องเข้า wikipedia ไปหาอ่านเรื่อง Multimethod หรือ Multiple Dispatch บ้าง
ในการทำความเข้าใจกับเรื่องนี้ เราก็ควรจะเริ่มจาก basic สุดก่อนก็คือ Single Dispatch ซึ่งใช้ใน Java, C++, Smalltalk, Objective-C
ลองดู code นี้
public abstract class Animal {
public abstract void feed(Food food);
}
public abstract class Food {
}
public class Fish extends Food {
}
public class Bone extends Food {
}
public class Dog extends Animal {
@Override
public void feed(Food food) {
System.out.println("I 'm full. Hong Hong!!!");
}
}
public class Cat extends Animal {
@Override
public void feed(Food food) {
System.out.println("I 'm full. Meaw Meaw!!!");
}
public void feed(Bone food) {
System.out.println("I don't like this. Meaw Meaw!!!");
}
}
ถ้าลอง run แบบนี้ดู
public class Runme {
public static void main(String[] args) {
Animal a = new Dog();
Animal b = new Cat();
Bone bone = new Bone();
a.feed(bone);
b.feed(bone);
}
}
กรณีที่เป็น single dispatch ผลลัพท์ที่ได้ก็คือ
I 'm full. Hong Hong!!!
I 'm full. Meaw Meaw!!!
จะเห็นว่า single dispatch จะตัดสินใจเลือก method โดยดูแค่ว่าจะเลือกให้ class ไหนรับผิดชอบในการ handle การ call, โดยไม่ได้สนใจ type ของ arguments
ส่วน multiple dispatch มันจะเลือก method โดยดู type ของ arguments ด้วย
ถ้าทดลองนำ code ข้างบน ไป run ใน groovy ซึ่งเป็น multiple dispatch ผลลัพท์ทีได้ก็คือ
I 'm full. Hong Hong!!!
I don't like this. Meaw Meaw!!!
No comments:
Post a Comment