วันพุธที่ 30 กรกฎาคม พ.ศ. 2557

Factory Pattern


>> นี่เป็น design pattern ที่ต้องการจะสื่อว่า ออบเจ็กต์ที่เราต้องการนั้น เราไม่ต้องสนใจว่ามันสร้างมาอย่างไร เพียงบอกชนิด (หรือชื่อ) ของออบเจ็กต์ เดี๋ยว design pattern นี้จะสร้างออบเจ็กต์ตามต้องการนั้นมาให้ครับ

>> factory pattern จะมีเมธอดสำหรับสร้างออบเจ็กต์ให้เอง โดยทั่วไปจะตั้งชื่อเมธอดนี้อย่างไรก็ได้ สมมติเป็นเรื่องการสร้างรูปทรงเรขาคณิต อาจตั้งชื่อว่า getShape, ถ้าเป็นเรื่องการสร้างไฟล์ logger อาจตั้งชื่อว่า createLogger หรือเป็นเรื่องการสร้างผลไม้กระป๋อง อาจตั้งชื่อว่า buildFruitCan ก็ตามสะดวก

>> factory pattern เริ่มต้นด้วย interface ที่กำหนดกติกาใดๆให้กับคลาสที่ต้องการ implement หรือนำไปใช้ครับ จากตัวอย่างนี้เป็นการสร้างรูปทรงเรขาคณิตสามแบบ คือ Rectangle, Square และ Circle ทั้งสามคลาสล้วน implement เจ้า interface ที่ชื่อ Shape เพื่อให้ตัวเองสามารถเรียกเมธอด draw ได้

>> หัวใจสำคัญของ factory pattern นั้น จะต้องมีคลาสที่ทำหน้าที่เป็นโรงงานครับ คลาสดังกล่าวนี้จะมีเมธอดในการสร้างออบเจ็กต์ Rectangle, Square และ Circle ตามตัวอย่างคือเมธอด getShape โดยกำหนดให้มันรับ input เป็นชนิดหรือชื่อของรูปทรงเรขาคณิตเข้ามา แล้วเอาไปเทียบว่าเป็นชนิดหรือชื่อของออบเจ็กต์รูปทรงเรขาคณิตชิ้นไหน ก็คืนออบเจ็กต์ชิ้นนั้นออกไป

>> ประยุกต์อย่างไร? ในงานที่ผมทำอยู่นี้ ผมต้องวาดกราฟจาก google chart tools (https://developers.google.com/chart/?hl=th) แต่ละกราฟใช้ข้อมูลเดียวกัน ต่างเพียงชนิดของกราฟเท่านั้น ดังนั้นผมจะสร้างคลาส GoogleChartFactory ขึ้นมา เพื่อให้สามารถ createChartByType โดยระบุชนิดของกราฟว่าต้องการแบบไหน ในขณะนี้มีสี่แบบได้แก่ column chart, line chart, bar chart และ table chart แต่ละแบบก็จะมีคลาสเป็นของตัวเอง ได้แก่ ColumnChart, LineChart, BarChart และ TableChart ซึ่งจะต้องมีเมธอด draw ไว้สำหรับวาดกราฟเหมือนกันหมด ผมจึงให้พวกมัน implement เจ้า interface ชื่อ GoogleChart เพราะถูกกำหนดให้มีกติกา draw ไว้ภายในครับ

>> สรุป factory pattern เหมาะสำหรับงานที่ต้องการออบเจ็กต์อารมณ์โรงงานที่มีเครื่องจักรสามารถสร้างออบเจ็กต์ให้ได้ทำนองว่าเป็นกลุ่มก้อนเดียวกัน โดยเราสนใจเพียงสิ่งที่ป้อนให้กับมัน (เช่นชื่อกราฟ) มากกว่าที่จะสนใจว่ามันสร้างออบเจ็กต์ (วาดกราฟ) ให้เราได้อย่างไร

>> ผมขอยกมาเพียง chart diagram นะครับ ส่วนโค้ดภาษาจาวาประยุกต์เขียน pattern นี้อย่างไร โปรดเยี่ยมชมลิงค์ต้นฉบับด้านล่างนี้ได้เลยครับ
http://www.tutorialspoint.com/design_pattern/factory_pattern.htm

ไม่มีความคิดเห็น:

แสดงความคิดเห็น