ไม่ได้เขียนลงบล๊อกนานวันนี้เลยรวบยอดเขียนสามเรื่องเลยละกัน อันนี้กะว่าบันทึกไว้เล่นๆ แบบว่า enum ในจาวาทำอย่างนี้ก็ได้นะ ก่อนอื่นก็ต้องอธิบายคร่าวๆ ก่อนสินะว่า factory คืออะไร มันก็คือรูปแบบของคลาส กับเมธอดที่ไว้ใช้สร้าง object ต่างๆ ปกติเวลาจะสร้าง object อะไรใน java หรือ .net หรืออะไรก็ตามที่มี oop จะใช้การ new ขึ้นมา สำหรับ factory ที่ว่าก็คือเมธอดหรือคลาสที่รวม new พวกนี้เอาไว้นั่นเอง เวลามีการเปลี่ยนแปลงอะไร จะได้ไม่ต้องแก้ใหม่หลายจุด
ลองดู factory ปกติในจาวาดีกว่า
class CarFactory {
public static Car build(String brand) {
if (brand.equals("benz"))
return new LuxuryCar();
else if (brand.equals("bmw"))
return new JamesBondCar();
else if (brand.equals("toyota"))
return new TownCar();
else
throw new UnSupportBrandException();
}
}
interface Car {}
class LuxuryCar implements Car { ...ขับแล้วลอย... }
class JamesBondCar implements Car { ...ขับแล้วจะทำตัวน่่าสงสัย... }
class TownCar implements Car { ...ขับได้แต่ในเมือง... }
เวลาจะใช้รถก็จะได้ประมาณนี้
public class Driver {
public static void main(String... args) {
Car car = VehicalFactory.build("benz");
...
}
}
อ๊ะลองมาดูว่าหากใช้ enum จะเป็นยังไงดีกว่า
enum CarFactory {
benz, bmw, toyota;
public Car build() {
switch (this) {
case benz:
return new LuxuryCar();
case bmw:
return new JamesBondCar();
case toyota:
return new TownCar();
default:
throw new UnSupportBrandException();
}
}
}
เวลาใช้แทนที่จะเรียกแล้วใส่ชื่อเป็น String ก็จะกลายเป็นอย่างงี้
public class Driver {
public static void main(String... args) {
Car car = CarFactory.benz.build();
...
}
}
อ๊ะดูดีขึ้นหน่อย(หรือป่าว) แต่ดูแล้วชอบใช้ enum มากกว่านะ
ช่วงนี้เล่นแต่อะไรพื้นฐานแฮะ แต่จะให้เล่น framework ใหญ่ๆ ก็ปวดหัว แล้วก็ขี้เกียจสุดท้ายก็เลิกไป เล่นไอ้นี่ต่อไปแหละ ดีแล้วเนอะ