Java: รูปแบบวิธีการออกแบบโรงงาน | การออกแบบเชิงวัตถุ | รูปแบบการออกแบบ

เผยแพร่แล้ว: 2013-06-28

การออกแบบโรงงาน-วิธีรูปแบบการออกแบบเชิงวัตถุ

Factory Design Pattern เป็นหนึ่งในรูปแบบ Creational Design และมีการใช้กันอย่างแพร่หลายใน JDK เช่นเดียวกับเฟรมเวิร์ก เช่น Spring MVC และ Struts รูปแบบวิธีการของโรงงาน คือรูปแบบการออกแบบเชิงสร้างสรรค์เชิงวัตถุเพื่อใช้แนวคิดของโรงงานและจัดการกับปัญหาในการสร้างวัตถุ (ผลิตภัณฑ์) โดยไม่ระบุประเภทที่แน่นอนของวัตถุที่จะสร้างขึ้น แก่นแท้ของรูปแบบนี้คือ " กำหนดอินเทอร์เฟซสำหรับการสร้างวัตถุ แต่ให้คลาสที่ใช้อินเทอร์เฟซตัดสินใจว่าจะสร้างอินสแตนซ์ของคลาสใด เมธอด Factory อนุญาตให้คลาสเลื่อนการสร้างอินสแตนซ์ไปยังคลาสย่อย "

รูปแบบการออกแบบ Java

มาเรียนรู้วิธีใช้งานรูปแบบโรงงานใน java กันก่อน เราจะสร้าง 5 คลาสเพื่อใช้รูปแบบนี้

  • ซูเปอร์คลาส (CrunchfiyCompany.java)
    • ซูเปอร์คลาสในรูปแบบโรงงานสามารถเป็นอินเตอร์เฟส คลาสนามธรรม หรือคลาสจาวาปกติ สำหรับตัวอย่างของเรา เรามี super class เป็น abstract class ที่มีเมธอด toString() แทนที่เพื่อการทดสอบ
  • คลาสย่อย1 (CrunchifyEbay.java)
    • ขอให้สังเกตว่าคลาสกำลังขยายคลาส CrunchfiyCompany
  • คลาสย่อย2 (CrunchifyGoogle.java)
    • ขอให้สังเกตว่าคลาสกำลังขยายคลาส CrunchfiyCompany
  • คลาสโรงงาน (CrunchifyFactoryPattern.java)
    • ตอนนี้เรามี super class และ sub-class พร้อมแล้ว เราก็สามารถเขียน factory class ของเราได้
    • เราสามารถเก็บ Factory class Singleton หรือเราสามารถเก็บ method ที่คืนค่า subclass เป็นแบบสแตติก
    • โปรดสังเกตว่าตามพารามิเตอร์อินพุต คลาสย่อยที่แตกต่างกันจะถูกสร้างขึ้นและส่งคืน
  • คลาสทดสอบ (CrunchifyFactoryPatternTest.java)
    • โปรแกรมไคลเอนต์ทดสอบอย่างง่ายที่ใช้การนำรูปแบบโรงงานไปใช้ข้างต้น

อื่นๆ ต้องอ่าน:

  • เธรดที่ปลอดภัยและการใช้งาน Singleton ที่รวดเร็วใน Java
  • Daemon Thread ใน Java คืออะไร? ตัวอย่างที่แนบมา

ตัวอย่างอื่นๆ โดยใช้รูปแบบโรงงาน?

  • วิธี java.util.Calendar, ResourceBundle และ NumberFormat getInstance() ใช้รูปแบบโรงงาน
  • valueOf() ในคลาส wrapper เช่น Boolean, Integer เป็นต้น

ประโยชน์ของรูปแบบโรงงาน:

  • มันถูกใช้เมื่อเรามี super class ที่มี sub-class หลายตัว และขึ้นอยู่กับ input เราจำเป็นต้องคืนค่า sub-class ตัวใดตัวหนึ่ง รูปแบบนี้นำความรับผิดชอบในการสร้างอินสแตนซ์ของคลาสออกจากโปรแกรมไคลเอนต์ไปจนถึงคลาสโรงงาน
  • รูปแบบโรงงานให้แนวทางในการโค้ดสำหรับส่วนต่อประสานมากกว่าการนำไปใช้
  • รูปแบบโรงงานจะลบอินสแตนซ์ของคลาสการใช้งานจริงออกจากโค้ดไคลเอ็นต์ ทำให้มีประสิทธิภาพมากขึ้น เชื่อมต่อน้อยลง และขยายได้ง่าย ตัวอย่างเช่น เราสามารถเปลี่ยนแปลงการใช้งานคลาส PC ได้อย่างง่ายดาย เนื่องจากโปรแกรมไคลเอนต์ไม่ทราบเรื่องนี้
  • รูปแบบโรงงานให้นามธรรมระหว่างการใช้งานและคลาสไคลเอนต์ผ่านการสืบทอด

ข้อเสีย:

  • โรงงานจะต้องใช้สำหรับตระกูลวัตถุ หากคลาสไม่ขยายคลาสพื้นฐานหรืออินเตอร์เฟสทั่วไป คลาสเหล่านี้จะไม่สามารถใช้ได้ในเทมเพลตการออกแบบจากโรงงาน

รายชื่อ Java Web Development, บทช่วยสอน Spring MVC ทั้งหมด