ก่อนที่จะกล่าวถึง Factory Method Pattern นั้น ผมคงต้องขอกล่าวถึง คำว่า Design Pattern ก่อนเพื่อที่จะให้ผู้อ่านทุกท่าน มีความเข้าใจในบทความนี้มากขึ้นครับ
Design pattern คือแบบแผนในการออกแบบซอฟแวร์เชิงวัตถุ ซึ่งมีการค้นคว้าวิจัยกันมานานและสรุปออกมาเป็นแบบแผนว่า แบบแผนนี้เหมาะกับโปรแกรมประเภทใดบ้าง ซึ่งค่อนข้างจะมีความสำคัญ โดยเฉพาะกับระบบใหญ่ๆ ลองนึกภาพดูเล่นๆว่าสมมติระบบนึงมี class ทั้งหมดประมาณ 100 class แต่ละ class ก็มีความสัมพันธ์ต่างๆ กับ class อื่นในระบบ ถ้าหากทีมผู้พัฒนาระบบทำงานโดยไม่มีหรือไม่ใช้แบบแผน(Design Pattern)ที่เหมาะสมกับระบบที่ทำแล้ว แทนที่จะสามารถพัฒนาได้ง่ายๆ อาจจะต้องใช้เวลาในการพัฒนาที่มากขึ้น ซ้ำร้าย เมื่อเกิดข้อผิดพลาด , Bug ต่างๆ ก็อาจจะตรวจและแก้ไข้ได้ค่อนข้างยาก เช่นกัน … เอาล่ะ พูดมาซะยืดยาว เรามาเข้าเรื่องกันดีกว่าครับ
Factory Method Pattern นั้นจัดเป็นส่วนหนึ่งของ Design Pattern จะมอง class กลุ่มหนึ่งเป็น โรงงานผลิตภัณฑ์ที่ผลิตสินค้าได้ประเภทเดียว เช่นถ้าผลิตไอศครีม ก็ต้องผลิตไอศครีมอย่างเดียว จะผลิตอย่างอื่นด้วยไม่ได้(เดี๋ยวผิด Concept - -“) และเมื่อเราต้องการไอศครีมรสใด เราก็เพียงแค่ส่ง message หรืออะไรสักอย่างไปบอกโรงงาน จากนั้นโรงงานส่งไอศครีมรสที่เราขอกลับมาให้เรา โดยที่เราไม่ต้องสนใจว่าโรงานนั้นมีกระบสนการผลิตอย่างไร
ดังนั้นอาจจะพูดได้ว่า Factory Method Pattern ประกอบไปด้วยสามส่วนคือ
1. Super Class เปรียบเหมือนตัวกำหนดหลักๆ ว่าโรงงานนี้จะผลิตสินค้า ประเภทไหน เช่นถ้าจะผลิตไอศครีม
2. Sub Class ที่เป็นเหมือนสินค้าที่ผลิตออกมาจากโรงงาน เช่นถ้าSuper Class เป็นโรงงานผลิตไอศครีม Sub Classจะเป็นเหมือนไอศครีมรสต่างๆ (พูดง่ายๆคือ มีแกนหลักเป็นไอศครีมเหมือนกัน แต่ส่วนประกอบของไอศครีมแต่ละรสอาจต่างกัน)
3. Factory Class เป็น Class อีกตัวที่จะต้องถูกสร้างขึ้นเพื่อเป็นตัวกำหนดการผลิต ซึ่งจุดเด่นของ Factory Method Pattern อยู่ทีนี่ โดยFactory Class จะมีMethodในการรับคำร้องขอการผลิตและจะคืนผลิตภัณท์ที่ได้ไปให้ผู้ร้องขอ
พูดมาถึงตรงนี้บางคนอาจจะงง ดังนั้นเราไปดู Source Code ประกอบเพื่อความเข้าใจกันดีกว่าครับ
จะเห็นว่า class Icecream เป็น Super Class ซึ่งเป็นตัวกำหนดว่าโรงงานนี้จะผลิตเฉพาะไอศครีมเท่านั้น ส่วน class Chocolate, class Vanilla, class Strawberry นั้นเป็น sub class ที่เป็นตัวกำหนดความแตกต่างของ ไอศครีมแต่ละรส และสุดท้ายคือ class IcecreamFactory ซึ่งเป็นเหมือนโรงงานผลิตไอศครีม ภายในมีเมธอด createIcecream ซึ่งจะรับพารามิเตอร์เป็นประเภทรสของไอศครีมที่ต้องการ จากนั้นจะคืนค่ากลับไปเป็นออบเจ็คของรสที่เลือก
สุดท้ายนี้ หวังว่าผู้ที่ได้อ่านบทความนี้จะได้รับความรู้เพิ่มเติมไม่มากก็น้อย
และหากมีข้อผิดพลาดปรการใดผู้เขียนใคร่ขออภัยมา ณ ที่นี้ด้วยครับ ^^"
จุดประสงค์ของงานจริง ๆ คือให้ไปศึกษาว่าใน Class Library ของ Java มีคลาสใดบ้าง (ยกตัวอย่างสองคลาส) ที่ให้เราสร้างออบเจกต์ผ่าน Factory method
ตอบลบ