ความแตกต่างระหว่างรูปแบบของอะแดปเตอร์และรูปแบบพร็อกซีหรือไม่


33

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

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

ฉันได้รับสิ่งนี้ถูกต้องหรือไม่

คำตอบ:


55

ไม่ทั้งหมด.

วัตถุประสงค์หลักของรูปแบบอะแดปเตอร์คือการเปลี่ยนอินเทอร์เฟซของคลาส / ไลบรารี A เป็นความคาดหวังของไคลเอนต์ B. การใช้งานทั่วไปคือคลาส wrapper หรือชุดของคลาส วัตถุประสงค์ไม่ใช่เพื่ออำนวยความสะดวกให้กับการเปลี่ยนแปลงอินเทอร์เฟซในอนาคต แต่เข้ากันไม่ได้ของอินเตอร์เฟสปัจจุบัน

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

  • ทรัพยากรจริงตั้งอยู่บนคอมพิวเตอร์ระยะไกล (พร็อกซีอำนวยความสะดวกในการโต้ตอบกับทรัพยากรระยะไกล)
  • ทรัพยากรจริงมีราคาแพงในการสร้าง (พร็อกซีช่วยให้มั่นใจได้ว่าค่าใช้จ่ายจะไม่เกิดขึ้นเว้นแต่ / จนกว่าจะมีความจำเป็นจริงๆ)

สิ่งที่สำคัญที่สุดคือพร็อกซีมีการแทนที่แบบดรอปอินสำหรับทรัพยากรจริงที่เป็นแบบสแตนด์อะโลนดังนั้นจึงต้องมีอินเทอร์เฟซเดียวกัน


ก่อนอื่นขอขอบคุณสำหรับคำตอบที่ดี พร็อกซีใช้อินเทอร์เฟซทั้งหมดที่ลูกค้าปัจจุบันต้องการหรือใช้อินเทอร์เฟซทั้งหมดที่ทรัพยากรจริงให้หรือไม่
Vorac

1
@Vorac: ขึ้นอยู่กับความซับซ้อนของอินเตอร์เฟสและปรัชญาการออกแบบของคุณ เป็นไปได้ทั้งสองอย่าง แต่ถ้าอินเทอร์เฟซมีขนาดใหญ่ / ซับซ้อนหรือคุณเชื่อมั่นใน YAGNI อย่างมากก็ควรใช้เฉพาะสิ่งที่คุณต้องการ
Bart van Ingen Schenau

ดังนั้นเมื่อกำหนดว่ารูปแบบของอะแดปเตอร์ใช้คลาสของ wrapper รูปแบบของอะแดปเตอร์เป็นรูปแบบพร็อกซีหรือไม่
moonman239

@ moonman239: ไม่เพราะความตั้งใจในการใช้คลาส wrapper นั้นแตกต่างกัน เพียงเพราะรูปแบบที่สองมีลักษณะคล้ายกันในแผนภาพคลาสไม่ได้หมายความว่าพวกมันเกี่ยวข้องกันหรือนำมาใช้ซึ่งกันและกัน ปัจจัยสำคัญสำหรับรูปแบบที่แตกต่างคือความตั้งใจของพวกเขา
Bart van Ingen Schenau

5

ฉันชอบคำอธิบายนี้:

พร็อกซีเปลี่ยนพฤติกรรมของบริการ แต่เก็บรักษาอินเตอร์เฟสไว้

อะแดปเตอร์เปลี่ยนอินเทอร์เฟซของบริการ แต่ยังคงรักษาไว้

แหล่งที่มา: https://www.netobjectives.com/PatternRepository/index.php?title=AdapterVersusProxyVersusFacadePatternComparison

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.