ฉันใช้เวลาในเรื่อง
ทั้งสี่รูปแบบมีจำนวนมากที่เหมือนกันบางครั้งทั้งสี่เป็นบางครั้งเรียกว่าเสื้อคลุมหรือรูปแบบเสื้อคลุม การใช้องค์ประกอบการรวมเรื่องการห่อและมอบหมายการดำเนินการกับเรื่องในบางจุดทำการแมปวิธีหนึ่งเรียกไปยังอีกวิธีหนึ่ง พวกเขาให้ความจำเป็นแก่ลูกค้าในการสร้างวัตถุที่แตกต่างและคัดลอกข้อมูลที่เกี่ยวข้องทั้งหมด หากใช้อย่างชาญฉลาดพวกเขาจะบันทึกหน่วยความจำและโปรเซสเซอร์
โดยการส่งเสริมการมีเพศสัมพันธ์แบบหลวมพวกเขาทำให้รหัสที่เสถียรน้อยลงเมื่อมีการเปลี่ยนแปลงที่หลีกเลี่ยงไม่ได้และสามารถอ่านได้ดีขึ้นสำหรับนักพัฒนาซอฟต์แวร์
อะแดปเตอร์
อะแดปเตอร์จะปรับหัวเรื่อง (adaptee) ให้เป็นอินเตอร์เฟสที่ต่างกัน วิธีนี้เราสามารถเพิ่มวัตถุถูกวางลงในคอลเลกชันประเภทที่แตกต่างกันในนาม
อะแดปเตอร์เปิดเผยเฉพาะวิธีการที่เกี่ยวข้องกับลูกค้าเท่านั้นที่สามารถ จำกัด ผู้อื่นทั้งหมดเปิดเผยการใช้งานสำหรับบริบทเฉพาะเช่นการปรับไลบรารี่ภายนอกทำให้มันดูเหมือนทั่วไปน้อยลงและเน้นความต้องการแอปพลิเคชันของเรามากขึ้น อะแดปเตอร์เพิ่มความสามารถในการอ่านและการอธิบายรหัสของเราเอง
อะแดปเตอร์ป้องกันหนึ่งทีมจากโค้ดระเหยจากทีมอื่น เครื่องมือช่วยชีวิตเมื่อต้องรับมือกับทีมนอกชายฝั่ง ;-)
จุดประสงค์ที่กล่าวถึงน้อยกว่าเพื่อป้องกันไม่ให้คลาสหัวเรื่องมีคำอธิบายประกอบเกินจำนวน ด้วยเฟรมเวิร์กมากมายที่ยึดตามคำอธิบายประกอบสิ่งนี้จะกลายเป็นการใช้งานที่สำคัญยิ่งกว่าเดิม
อะแด็ปเตอร์ช่วยในการหลีกเลี่ยงข้อ จำกัด Java ของการสืบทอดเดียวเท่านั้น มันสามารถรวมหลาย adaptees ภายใต้ซองเดียวให้แสดงผลของการสืบทอดหลาย
รหัสชาญฉลาดอะแดปเตอร์“ บาง” ไม่ควรเพิ่มโค้ดจำนวนมากให้กับคลาส adaptee นอกจากเพียงแค่เรียกเมธอด adaptee และการแปลงข้อมูลเป็นครั้งคราวที่จำเป็นในการโทรออก
ไม่มีตัวอย่างอะแดปเตอร์ที่ดีจำนวนมากใน JDK หรือไลบรารีพื้นฐาน นักพัฒนาแอปพลิเคชันสร้างอะแดปเตอร์เพื่อปรับไลบรารีให้เข้ากับอินเตอร์เฟสเฉพาะของแอปพลิเคชัน
มัณฑนากร
มัณฑนากรไม่เพียง แต่มอบหมายไม่เพียง แต่แมปวิธีหนึ่งไปยังอีกวิธีพวกเขาทำมากกว่าพวกเขาปรับเปลี่ยนพฤติกรรมของวิธีการบางเรื่องก็สามารถตัดสินใจที่จะไม่เรียกวิธีการเรื่องที่ทุกคนมอบหมายให้วัตถุอื่นวัตถุผู้ช่วย
โดยทั่วไปมัณฑนากรจะเพิ่มฟังก์ชัน (โปร่งใส) ให้กับวัตถุที่ถูกห่อเช่นการบันทึกการเข้ารหัสการจัดรูปแบบหรือการบีบอัดให้กับวัตถุ ฟังก์ชั่นใหม่นี้อาจมีรหัสใหม่มากมาย ดังนั้นนักตกแต่งมักจะ“ อ้วนขึ้น” มากแล้วอะแดปเตอร์
มัณฑนากรต้องเป็นส่วนย่อยของส่วนต่อประสานของหัวเรื่อง พวกเขาสามารถนำมาใช้อย่างโปร่งใสแทนวิชา ดู BufferedOutputStream มันยังคงเป็น OutputStream และสามารถใช้งานได้ นั่นคือความแตกต่างทางเทคนิคที่สำคัญจากอะแดปเตอร์
ตัวอย่างหนังสือเรียนของตระกูลมัณฑนากรทั้งคู่นั้นพร้อมใน JDK - Java IO ทุกชั้นเรียนเช่นBufferedOutputStream , FilterOutputStreamและObjectOutputStreamเป็นของตกแต่งOutputStream พวกเขาสามารถเป็นชั้นหัวหอมที่หนึ่งในมัณฑนากรได้รับการตกแต่งอีกครั้งเพิ่มการทำงานมากขึ้น
หนังสือมอบฉันทะ
พร็อกซีไม่ใช่เสื้อคลุมทั่วไป วัตถุที่ถูกห่อหุ้มซึ่งอยู่ภายใต้พร็อกซีอาจยังไม่มีอยู่ ณ เวลาที่สร้างพร็อกซี พร็อกซีมักสร้างภายใน มันอาจเป็นวัตถุหนักที่สร้างขึ้นตามความต้องการหรือเป็นวัตถุระยะไกลใน JVM ที่แตกต่างกันหรือโหนดเครือข่ายที่แตกต่างกันและแม้กระทั่งวัตถุที่ไม่ใช่ Java ซึ่งเป็นส่วนประกอบในรหัสเนทีฟ ไม่จำเป็นต้องห่อหรือมอบสิทธิ์ให้กับวัตถุอื่นเลย
ตัวอย่างทั่วไปส่วนใหญ่เป็นพร็อกซีระยะไกลวัตถุเริ่มต้นหนักและการเข้าถึงพร็อกซี่
รีโมตพร็อกซี - หัวเรื่องอยู่บนเซิร์ฟเวอร์ระยะไกล, JVM อื่นหรือแม้แต่ระบบที่ไม่ใช่ Java พร็อกซีแปลการเรียกใช้เมธอดไปที่การเรียก RMI / REST / SOAP หรือสิ่งที่จำเป็นเพื่อป้องกันไคลเอ็นต์จากการสัมผัสกับเทคโนโลยีพื้นฐาน
Lazy Load Proxy - เริ่มต้นวัตถุอย่างสมบูรณ์เฉพาะการใช้งานครั้งแรกหรือการใช้งานครั้งแรกอย่างเข้มข้น
Access Proxy - ควบคุมการเข้าถึงหัวเรื่อง
หน้าตึก
ซุ้มมีความสัมพันธ์อย่างใกล้ชิดกับหลักการออกแบบน้อยที่สุด (กฎหมายของ Demeter) ซุ้มมีลักษณะคล้ายกับอะแดปเตอร์ พวกเขาทั้งสองห่อพวกเขาทั้งคู่ทำแผนที่วัตถุหนึ่งไปยังอีกวัตถุหนึ่ง แต่พวกเขาต่างกันในเจตนา ซุ้มแบนโครงสร้างที่ซับซ้อนของวัตถุกราฟวัตถุที่ซับซ้อนทำให้การเข้าถึงโครงสร้างที่ซับซ้อนง่ายขึ้น
Facade ล้อมรอบโครงสร้างที่ซับซ้อน สิ่งนี้จะช่วยป้องกันไม่ให้วัตถุลูกค้าสัมผัสกับความสัมพันธ์ภายในในโครงสร้างของเรื่องดังนั้นจึงส่งเสริมการมีเพศสัมพันธ์แบบหลวม ๆ
สะพาน
ตัวแปรที่ซับซ้อนกว่าของรูปแบบของอะแดปเตอร์ที่ไม่เพียง แต่การใช้งานจะแตกต่างกันไป แต่ยังรวมถึงนามธรรม มันเพิ่มอีกหนึ่งทางอ้อมในการมอบหมาย คณะผู้แทนพิเศษคือสะพาน มัน decouples ตัวปรับต่อได้จากการปรับอินเทอร์เฟซ มันเพิ่มความซับซ้อนมากกว่ารูปแบบการห่ออื่น ๆ ดังนั้นควรใช้ด้วยความระมัดระวัง
ความแตกต่างในการก่อสร้าง
ความแตกต่างของรูปแบบก็ชัดเจนเมื่อดูที่ตัวสร้าง
พร็อกซีไม่ได้ห่อวัตถุที่มีอยู่ ไม่มีหัวเรื่องในตัวสร้าง
มัณฑนากรและอะแดปเตอร์ไม่ห่อวัตถุที่มีอยู่แล้วและโดยทั่วไปแล้วจะ
มีอยู่ในตัวสร้าง
ตัวสร้างFacadeใช้องค์ประกอบรากของกราฟวัตถุทั้งหมดมิฉะนั้นจะดูเหมือนอะแดปเตอร์
ตัวอย่างชีวิตจริง - JAXB Marshalling อะแดปเตอร์ วัตถุประสงค์ของอะแดปเตอร์นี้คือการแมปคลาสแบบเรียบง่ายไปยังโครงสร้างที่ซับซ้อนกว่าที่ต้องการจากภายนอกและเพื่อป้องกันไม่ให้คลาสหัวเรื่อง "สร้างมลพิษ" ด้วยคำอธิบายประกอบที่มากเกินไป