ช่วงนี้ตอบคำถามเกี่ยวกับเรื่องนี้บ่อยเอามาเขียนซะเลย เริ่มจาก misui บ่นๆ มาว่าทำยังไงให้ Tree ในจาวาเปลี่ยนแปลงข้อมูลในตารางเมื่อข้อมูลจริงมันเปลี่ยนไป โดยก็บอกว่าตอนนี้ทำไว้เป็นลูปวนไปเรื่อยๆ ฟังปุ๊บก็เอะใจทันที เอ๊ะ Tree ในจาวามันมี Event Listener นี่หว่าก็เลยบอกไปว่าดูฟังก์ชั่นพวกนั้นซะ แล้วก็เล่าไปนิดหน่อยว่ามันไว้ทำไรบ้าง มาวันนี้เจออีกกรณี แต่รูปแบบคนละเรื่องเลยคือ MSN Library ที่ใช้อยู่เวลามันทำอะไรมันจะทำอยู่อีกเธรดเกิดเหตุการณ์อะไรขึ้นก็ค่อยเรียกฟังก์ชั่นที่ลงทะเบียนไว้ คราวนี้มันเกิดเหตุการณ์นั้นจริงแต่ว่ามันไม่สามารถส่งข้อความไปบอกไอ้คนที่ต้องใช้มันได้ ก็เลยต้องหาอะไรมารับมันอีกต่อ แล้วก็ให้คนที่ต้องการมาคอยฟังซะ(แต่จริงๆ มันไม่ใช่อย่างนี้หรอก ไอ้คนฟังมันดันอยู่ชั้นบนๆ เป็นตัวติดต่อเว็บ แต่ไอ้คนไปติดต่อ MSN มันดันวิ่งๆ อยู่ด้านล่าง พอเจอปัญหาจะวิ่งไปบอกชั้นบนเลยลำบาก) อ่ะเล่าถึงกรณีตัวอย่างไปซะเยอะ แต่ไม่เห็นเขียนถึงคำว่า Observer เลย จริงๆแล้วมันก็คือตัวเดียวกับ Event Listener นั่นแหละ หน้าที่ของมันนั้นก็แสนง่ายเมื่อมีเหตุการณ์อะไรขึ้นก็คอยบอกให้ทุกคนที่เกี่ยวข้องรับรู้นั่นเอง พวกส่วนที่เป็นหน้าตาทั้งหลายเลยมักต้องมีรูปแบบพวกนี้อยู่ในตัว ถ้าใครเขียน Flex มาเยอะน่าจะรู้ดีเลยหละ เพราะ Component ทุกตัวเป็น EventDispatcher ที่สามารถเรียกคู่กรณีที่ต้องรับหน้าที่ต่อจากมัน หรืออยาก Swing ในจาวาก็มีรูปแบบที่เหมือนกัน แต่ใช่ว่าจะใช้แค่ใน UI [...]
Headfirst : Design pattern
หลังจากรอมาสิบห้าวัน และแล้วก็มาถึงจนได้ด้วยสภาพอย่างที่เห็น ทำไมมันต่างจากญาติพี่น้อง(Head first : Object oriented Analysis & Design) ที่ซื้อในไทยพอสมควรเลยก็ไม่รู้แฮะ
Enum Factory
ไม่ได้เขียนลงบล๊อกนานวันนี้เลยรวบยอดเขียนสามเรื่องเลยละกัน อันนี้กะว่าบันทึกไว้เล่นๆ แบบว่า 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 [...]