กลับไปหน้าบทความ

อ่าน 3 นาที

รูปแบบพร็อกซี

ใน การเขียนโปรแกรมคอมพิวเตอร์ รูป แบบพร็อกซี (Proxy pattern) เป็น รูปแบบการออกแบบซอฟต์แวร์ ที่เป็นคลาสที่ทำหน้าที่เป็นอินเทอร์เฟซไปยังสิ่งอื่น พร็อกซีสามารถเชื่อมต่อกับอะไรก็ได้...

รูปแบบพร็อกซี

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

ภาพรวม

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

ปัญหา

รูปแบบการออกแบบพร็อกซีใช้เพื่อแก้ปัญหาดังกล่าว: [ 2 ]

  • การเข้าถึงวัตถุควรได้รับการควบคุม
  • ควรเพิ่มฟังก์ชันการทำงานเพิ่มเติมเมื่อเข้าถึงวัตถุ

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

สารละลาย

กำหนดProxyวัตถุแยกต่างหากที่

  • สามารถใช้แทนวัตถุอื่นได้ ( Subject) และ
  • เพิ่มฟังก์ชันเพิ่มเติมเพื่อควบคุมการเข้าถึงหัวข้อนี้

วิธีนี้ทำให้สามารถทำงานผ่านProxyวัตถุเพื่อดำเนินการฟังก์ชันเพิ่มเติมเมื่อเข้าถึงหัวข้อ เช่น การตรวจสอบสิทธิ์การเข้าถึงของไคลเอ็นต์ที่เข้าถึงวัตถุที่มีความละเอียดอ่อน

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

โปรดดูแผนภาพคลาสและลำดับ UML ด้านล่างด้วย

โครงสร้าง

แผนภาพคลาสและลำดับ UML

ตัวอย่างคลาส UML และไดอะแกรมลำดับสำหรับรูปแบบการออกแบบพร็อกซี [ 3 ]

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

แผนภาพลำดับแสดงปฏิสัมพันธ์ขณะทำงาน: Clientวัตถุทำงานผ่านProxyวัตถุที่ควบคุมการเข้าถึงRealSubjectวัตถุ ในตัวอย่างนี้ วัตถุProxyจะส่งต่อคำขอไปยังวัตถุRealSubjectที่ดำเนินการตามคำขอ

แผนภาพคลาส

พร็อกซีในUML
พร็อกซีในLePUS3 ( คำอธิบาย )

ตัวอย่างการใช้งานที่เป็นไปได้

พร็อกซีระยะไกล

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

พร็อกซีเสมือน

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

พร็อกซีป้องกัน

อาจใช้พร็อกซีป้องกันเพื่อควบคุมการเข้าถึงทรัพยากรโดยอิงตามสิทธิ์การเข้าถึง

ตัวอย่าง

ต่อไปนี้เป็นตัวอย่างของรูปแบบการออกแบบพร็อกซีในภาษา C++ :

import std ;using std :: string ; using std :: unique_ptr ;// คลาสอินเทอร์เฟซของหัวเรื่องImage { public : virtual void display () const = 0 ; virtual ~ Image () = default ; };// วัตถุจริง (ใช้เวลาในการโหลดมาก) คลาสRealImage : public Image { private : string filename ; public : explicit RealImage ( const string & file ) : filename { file } { loadFromDisk (); } }void display () const override { std :: println ( "กำลังแสดงภาพ: {}" , filename ); }private : void loadFromDisk () const { std :: println ( "กำลังโหลดภาพจากดิสก์: {}" , filename ); } };// พร็อกซี (ควบคุมการเข้าถึง RealImage) คลาสProxyImage : public Image { private : string filename ; mutable unique_ptr < RealImage > realImage ; // สร้างขึ้นแบบไม่ทันทีpublic : explicit ProxyImage ( const string & file ) : filename { file } {}void display () const override { if ( ! realImage ) { std :: println ( " (Proxy) กำลังโหลดรูปภาพตามต้องการ..." ); realImage = std :: make_unique <RealImage> ( filename ); } realImage- > display ( ); } };// โค้ดฝั่งไคลเอ็นต์int main () { Image * img = new ProxyImage ( "photo.png" );// แสดงผลครั้งแรก (ควรโหลดเสร็จ) img -> display ();// การแสดงผลครั้งที่สอง (ควรใช้ภาพที่แคชไว้) img -> display ();ลบรูปภาพ; ส่งคืนค่า0 ; }

ดูเพิ่มเติม

  • Geary, David (22 กุมภาพันธ์ 2545). "ควบคุมด้วยรูปแบบการออกแบบ Proxy" . JavaWorld . สืบค้นเมื่อ20 กรกฎาคม 2563 .
  • โปรเจกต์โอเพนซอร์ส PerfectJPatternนำเสนอการใช้งาน Proxy Pattern ในรูปแบบคอมโพเนนต์ในภาษา Java
  • การเปรียบเทียบรูปแบบ Adapter, Proxy และ Facadeที่Wayback Machine (เก็บถาวรเมื่อ 11 มีนาคม 2012)
  • รูปแบบการออกแบบพร็อกซี
  • ตัวอย่างการใช้งานรูปแบบพร็อกซีในภาษา C++ที่Wayback Machine (เก็บถาวรเมื่อ 19 ตุลาคม 2014)
  • คำอธิบายรูปแบบพร็อกซีจากคลังรูปแบบพอร์ตแลนด์
ดึงข้อมูลมาจาก " https://en.wikipedia.org/w/index.php?title=Proxy_pattern&oldid=1342759186 "

สรุปเนื้อหา

ข้อมูลสำคัญจากบทความ

ข้อมูลสำคัญเกี่ยวกับ รูปแบบพร็อกซี

ใน การเขียนโปรแกรมคอมพิวเตอร์ รูป แบบพร็อกซี (Proxy pattern) เป็น รูปแบบการออกแบบซอฟต์แวร์ ที่เป็นคลาสที่ทำหน้าที่เป็นอินเทอร์เฟซไปยังสิ่งอื่น พร็อกซีสามารถเชื่อมต่อกับอะไรก็ได้...

ภาพรวม

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

ปัญหา

รูปแบบการออกแบบพร็อกซีใช้เพื่อแก้ปัญหาดังกล่าว: [ 2 ]

แผนภาพคลาสและลำดับ UML

ใน แผนภาพคลาส UML ด้านบน คลาส นี้ ใช้อินเทอร์เฟซเพื่อให้สามารถทำหน้าที่แทนวัตถุได้ โดยจะเก็บการอ้างอิง ( ) ไปยังวัตถุที่ถูกแทนที่ ( ) เพื่อให้สามารถส่งต่อคำขอไปยังวัตถุนั้นได้ ( ) Proxy Subject Subject realSubject RealSubject realSubject.operation()