คำจำกัดความ: กำหนดอินเทอร์เฟซสำหรับการสร้างวัตถุให้คลาสย่อยตัดสินใจว่าคลาสใดที่จะสร้างอินสแตนซ์และวิธีการโรงงานจะทำให้การสร้างอินสแตนซ์ของคลาสเป็นคลาสย่อย
ประเภท: สร้างแผนภาพคลาสรูปแบบคลาส:
รหัสวิธีการโรงงานรหัสรูปแบบ
อินเตอร์เฟส iProduct {โมฆะสาธารณะ ProductMethod (); } ผลิตภัณฑ์คลาสใช้ iProduct {โมฆะสาธารณะ ProductMethod () {system.out.println ("ผลิตภัณฑ์"); }} อินเตอร์เฟส ifactory {สาธารณะ iProduct createProduct (); } คลาสโรงงานใช้ ifactory {สาธารณะ iProduct createProduct () {ส่งคืนผลิตภัณฑ์ใหม่ (); }} ไคลเอนต์คลาสสาธารณะ {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {ifactory Factory = New Factory (); iProduct ผลิต = Factory.CreateProduct (); Produce.productMethod (); - โหมดโรงงาน:
ก่อนอื่นเราต้องพูดคุยเกี่ยวกับรูปแบบโรงงาน โหมดโรงงานแบ่งออกเป็นสามประเภทตามระดับของสิ่งที่เป็นนามธรรม: โหมดโรงงานอย่างง่าย (หรือที่เรียกว่าโหมดโรงงานคงที่) โหมดวิธีโรงงานที่อธิบายไว้ในบทความนี้และโหมดโรงงานนามธรรม โหมดโรงงานเป็นแบบจำลองที่มักใช้ในการเขียนโปรแกรม ข้อดีหลักของมันคือ:
มันสามารถทำให้โครงสร้างรหัสชัดเจนและห่อหุ้มการเปลี่ยนแปลงอย่างมีประสิทธิภาพ ในการเขียนโปรแกรมการสร้างอินสแตนซ์ของคลาสผลิตภัณฑ์บางครั้งซับซ้อนและเปลี่ยนแปลงได้ ผ่านโมเดลโรงงานการสร้างอินสแตนซ์ของผลิตภัณฑ์จะถูกห่อหุ้มเพื่อให้ผู้โทรไม่จำเป็นต้องใส่ใจเกี่ยวกับกระบวนการสร้างอินสแตนซ์ของผลิตภัณฑ์และพึ่งพาโรงงานเพื่อรับผลิตภัณฑ์ที่พวกเขาต้องการ
บล็อกหมวดหมู่ผลิตภัณฑ์เฉพาะจากผู้โทร หากคุณใช้โหมดโรงงานผู้โทรจะใส่ใจกับอินเทอร์เฟซของผลิตภัณฑ์เท่านั้น สำหรับการใช้งานเฉพาะผู้โทรไม่จำเป็นต้องใส่ใจเลย แม้ว่าการใช้งานเฉพาะจะมีการเปลี่ยนแปลง แต่ก็จะไม่มีผลกระทบต่อผู้โทร
ลดการมีเพศสัมพันธ์ การสร้างอินสแตนซ์ของคลาสผลิตภัณฑ์มักจะซับซ้อนมาก มันต้องพึ่งพาหลายชั้นเรียนและคลาสเหล่านี้ไม่จำเป็นต้องเป็นที่รู้จักของผู้โทรเลย หากใช้วิธีการจากโรงงานสิ่งที่เราต้องทำคือการยกตัวอย่างคลาสผลิตภัณฑ์แล้วส่งไปยังผู้โทรเพื่อใช้งาน สำหรับผู้โทรคลาสที่ผลิตภัณฑ์ขึ้นอยู่กับมีความโปร่งใส
โหมดวิธีโรงงาน:
ผ่านแผนภาพคลาสของรูปแบบวิธีการโรงงานเราจะเห็นได้ว่ารูปแบบวิธีการโรงงานมีองค์ประกอบสี่ประการ:
อินเทอร์เฟซโรงงาน อินเทอร์เฟซโรงงานเป็นแกนหลักของรูปแบบวิธีการโรงงานและใช้เพื่อให้ผลิตภัณฑ์โดยตรงกับผู้โทร ในการเขียนโปรแกรมจริงบางครั้งคลาสนามธรรมถูกใช้เป็นอินเทอร์เฟซเพื่อโต้ตอบกับผู้โทรซึ่งเป็นหลักเหมือนกัน
การใช้งานจากโรงงาน ในการเขียนโปรแกรมการใช้งานจากโรงงานกำหนดวิธีการสร้างอินสแตนซ์ผลิตภัณฑ์ซึ่งเป็นวิธีการขยายการขยายตัว จำนวนผลิตภัณฑ์ที่ต้องการคือการใช้งานจากโรงงานที่เฉพาะเจาะจงมากเท่าที่มี
อินเทอร์เฟซผลิตภัณฑ์ วัตถุประสงค์หลักของอินเทอร์เฟซผลิตภัณฑ์คือการกำหนดข้อกำหนดของผลิตภัณฑ์และการใช้งานผลิตภัณฑ์ทั้งหมดจะต้องเป็นไปตามข้อกำหนดที่กำหนดโดยอินเทอร์เฟซผลิตภัณฑ์ อินเทอร์เฟซผลิตภัณฑ์เป็นสิ่งที่ผู้โทรใส่ใจส่วนใหญ่และข้อดีและข้อเสียของคำจำกัดความของอินเทอร์เฟซผลิตภัณฑ์โดยตรงจะกำหนดเสถียรภาพของรหัสของผู้โทร ในทำนองเดียวกันอินเทอร์เฟซผลิตภัณฑ์สามารถถูกแทนที่ด้วยคลาสนามธรรม แต่ระวังอย่าละเมิดหลักการทดแทน Richter
การใช้งานผลิตภัณฑ์ หมวดหมู่เฉพาะของอินเทอร์เฟซผลิตภัณฑ์กำหนดพฤติกรรมเฉพาะของผลิตภัณฑ์ในไคลเอนต์
ข้อดีของแบบจำลองวิธีโรงงาน:
1. บรรจุภัณฑ์ที่ดีและลดการมีเพศสัมพันธ์ระหว่างโมดูล
2. การเผชิญหน้ากับอินเทอร์เฟซผลิตภัณฑ์และการปิดกั้นหมวดหมู่ผลิตภัณฑ์
3. เฟรมเวิร์ก decoupling ทั่วไป โมดูลระดับสูงจำเป็นต้องรู้คลาสนามธรรมของผลิตภัณฑ์เท่านั้น
4. ปฏิบัติตามกฎหมาย Dimitese หลักการของการพึ่งพาการผกผันและหลักการของการเปลี่ยนริกเตอร์
สถานการณ์ที่เกี่ยวข้อง:
ไม่ว่าจะเป็นแบบจำลองโรงงานอย่างง่ายรูปแบบวิธีการโรงงานหรือแบบจำลองโรงงานนามธรรมพวกเขามีลักษณะคล้ายกันดังนั้นสถานการณ์ที่ใช้งานได้ของพวกเขาก็คล้ายกันเช่นกัน
ก่อนอื่นเป็นรูปแบบคลาสการสร้างรูปแบบวิธีการโรงงานสามารถใช้งานได้ทุกที่ที่มีวัตถุที่ซับซ้อน สิ่งหนึ่งที่ควรทราบคือวัตถุที่ซับซ้อนเหมาะสำหรับการใช้โหมดโรงงานในขณะที่วัตถุง่าย ๆ โดยเฉพาะอย่างยิ่งวัตถุที่สามารถสร้างได้ผ่านใหม่ไม่จำเป็นต้องใช้โหมดโรงงาน หากคุณใช้แบบจำลองโรงงานคุณจะต้องแนะนำคลาสโรงงานซึ่งจะเพิ่มความซับซ้อนของระบบ
ประการที่สองโมเดลโรงงานเป็นโหมด decoupling ทั่วไปและกฎหมาย dimitter นั้นชัดเจนเป็นพิเศษในรูปแบบโรงงาน หากผู้โทรต้องการเพิ่มการพึ่งพาเพื่อรวบรวมผลิตภัณฑ์ด้วยตัวเองเขาสามารถพิจารณาใช้แบบจำลองโรงงาน มันจะลดการมีเพศสัมพันธ์ระหว่างวัตถุอย่างมาก
อีกครั้งเนื่องจากแบบจำลองโรงงานขึ้นอยู่กับสถาปัตยกรรมนามธรรมจึงส่งมอบงานในการสร้างอินสแตนซ์ผลิตภัณฑ์ให้กับคลาสการใช้งานเพื่อให้เสร็จสมบูรณ์ซึ่งมีความสามารถในการปรับขนาดได้ดีขึ้น กล่าวอีกนัยหนึ่งเมื่อระบบจำเป็นต้องปรับขนาดได้มากขึ้นโมเดลโรงงานสามารถพิจารณาได้และผลิตภัณฑ์ที่แตกต่างกันสามารถประกอบเข้ากับโรงงานการนำไปปฏิบัติที่แตกต่างกัน
แอปพลิเคชันทั่วไป
เพื่อแสดงให้เห็นถึงข้อดีของแบบจำลองโรงงานอาจไม่มีตัวอย่างที่เหมาะสมไปกว่าการประกอบรถยนต์ สถานการณ์เป็นเช่นนี้: รถประกอบด้วยเครื่องยนต์ล้อและแชสซีและตอนนี้จำเป็นต้องประกอบรถและส่งมอบให้กับผู้โทร หากไม่ได้ใช้โหมดโรงงานรหัสจะมีดังนี้:
เครื่องยนต์คลาส {โมฆะสาธารณะ getStyle () {system.out.println ("นี่คือเครื่องยนต์ของรถ"); }} คลาส Underpan {โมฆะสาธารณะ getStyle () {system.out.println ("นี่คือแชสซีของรถ"); }} ระดับล้อ {โมฆะสาธารณะ getStyle () {system.out.println ("นี่คือยางของรถ"); }} ไคลเอนต์คลาสสาธารณะ {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {เครื่องยนต์เครื่องยนต์ = เครื่องยนต์ใหม่ (); Underpan Underpan = underpan ใหม่ (); ล้อล้อ = ล้อใหม่ (); ICAR Car = ใหม่รถยนต์ (Underpan, Wheel, Engine); car.show (); -จะเห็นได้ว่าเพื่อที่จะประกอบรถผู้โทรยังต้องทำอินสแตนซ์เครื่องยนต์แชสซีและยางและส่วนประกอบของรถยนต์เหล่านี้เป็นอิสระจากผู้โทรซึ่งละเมิดกฎหมาย Dimitt อย่างจริงจังและมีการมีเพศสัมพันธ์สูงเกินไป และมันก็ไม่เอื้ออำนวยต่อการขยายตัว นอกจากนี้ในตัวอย่างนี้เครื่องยนต์แชสซีและยางมีความเฉพาะเจาะจง ในแอปพลิเคชันจริงส่วนประกอบของผลิตภัณฑ์เหล่านี้อาจเป็นนามธรรมและผู้โทรไม่รู้ว่าจะรวบรวมผลิตภัณฑ์อย่างไร หากใช้วิธีการจากโรงงานสถาปัตยกรรมทั้งหมดจะปรากฏชัดเจนขึ้นมาก
อินเทอร์เฟซ ifactory {public iCar CreateCar (); } คลาสโรงงานใช้ ifactory {public iCar createCar () {Engine Engine = เครื่องยนต์ใหม่ (); Underpan Underpan = underpan ใหม่ (); ล้อล้อ = ล้อใหม่ (); ICAR Car = ใหม่รถยนต์ (Underpan, Wheel, Engine); รถกลับ; }} ไคลเอนต์คลาสสาธารณะ {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {ifactory Factory = New Factory (); ICAR Car = Factory.CreateCar (); car.show (); -หลังจากใช้วิธีการจากโรงงานระดับการมีเพศสัมพันธ์ทางด้านการโทรจะลดลงอย่างมาก และสำหรับโรงงานสามารถขยายได้ หากคุณต้องการรวบรวมรถยนต์คันอื่นในอนาคตคุณจะต้องเพิ่มการใช้งานโรงงานอื่นเท่านั้น ทั้งความยืดหยุ่นและความมั่นคงได้รับการปรับปรุงอย่างมาก
PS: โหมดวิธีโรงงานและโหมดโรงงานง่ายๆ
แบบจำลองโรงงานอย่างง่ายที่กล่าวถึงข้างต้นนั้นคล้ายกับโมเดลวิธีโรงงานมาก แกนหลักของคลาสวิธีการเป็นโรงงานคือคลาสโรงงานนามธรรมในขณะที่แบบจำลองโรงงานง่าย ๆ วางแกนไว้ในคลาสคอนกรีต ความแตกต่างในโมเดลวิธีการโรงงานและแบบจำลองโรงงานอย่างง่ายนั้นไม่ชัดเจนนัก