คำนิยาม:
จัดเตรียมตัวแทนหรือตัวยึดสำหรับวัตถุอื่นเพื่อควบคุมการเข้าถึง
พร็อกซีสำหรับวัตถุอื่น ๆ เพื่อควบคุมการเข้าถึงวัตถุนี้
คำอธิบายทั่วไป:
โดยทั่วไปจะมีสามบทบาท: ชุดรูปแบบนามธรรมธีมคอนกรีตและชุดรูปแบบตัวแทน
แผนภาพชั้นเรียนทั่วไป:
รหัสทั่วไป:
แพ็คเกจพร็อกซี; // บทคัดย่อหัวข้อคลาส: หัวเรื่องสาธารณะหัวเรื่อง {โมฆะสาธารณะ dosomething ();} แพ็คเกจพร็อกซี; // หัวข้อเฉพาะคลาสคลาสสาธารณะ realsubject ใช้หัวข้อ {@Override โมฆะสาธารณะ dosomething () {system.out.println ("ตรรกะธุรกิจ ... "); "); }} แพ็คเกจพร็อกซี; // พร็อกซีหัวข้อคลาสพร็อกซีใช้หัวข้อ {หัวเรื่องส่วนตัวย่อย = null; @Override โมฆะสาธารณะ Dosomething () {this.sub.dosomething (); } พร็อกซีสาธารณะ (หัวเรื่องย่อย) {this.sub = sub; }} แพ็คเกจพร็อกซี; // ไคลเอนต์คลาสสาธารณะไคลเอนต์ {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {หัวเรื่อง realsub = ใหม่ realsubject (); พร็อกซีหัวเรื่อง = พร็อกซีใหม่ (realsub); Proxy.dosomething (); -ข้อได้เปรียบ :
1. ความรับผิดชอบที่ชัดเจน
2. การขยายตัวสูง
ส่วนขยายของโหมดพร็อกซี:
ตัวแทนปกติ:
คลาสธีมเฉพาะนั้นโปร่งใสถึงระดับระดับสูงและคลาสธีมเฉพาะจะถูกสร้างขึ้นในคลาสธีมพร็อกซี
การใช้รหัส:
แพ็คเกจ GeneralProxy; หัวเรื่องสาธารณะ {โมฆะสาธารณะ dosomething ();} แพ็คเกจ GeneralProxy; คลาสสาธารณะ RealSubject ใช้หัวเรื่อง {ชื่อสตริงส่วนตัว = null; @Override โมฆะสาธารณะ dosomething () {system.out.println (this.name + "พร็อกซีดำเนินการตรรกะทางธุรกิจ ... "); } RealSubject สาธารณะ (หัวเรื่องพร็อกซี, ชื่อสตริง) โยนข้อยกเว้น {ถ้า (proxy == null) {โยนข้อยกเว้นใหม่ ("วัตถุพร็อกซีไม่สามารถสร้างได้"); } else {this.name = name; }}} แพ็คเกจ GeneralProxy; พร็อกซีระดับสาธารณะใช้เรื่อง {หัวเรื่องส่วนตัว realsub = null; พร็อกซีสาธารณะ (ชื่อสตริง) {ลอง {realsub = ใหม่ realsubject (ชื่อนี้); } catch (exception e) {e.printstacktrace (); }} โมฆะสาธารณะ dosomething () {realsub.dosomething (); }} แพ็คเกจ GeneralProxy; ไคลเอนต์คลาสสาธารณะ {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {// proxy proxy proxy = new proxy ("Zhang San"); Proxy.dosomethaing (); -
พร็อกซีบังคับ:
คุณต้องได้รับวัตถุของคลาสพร็อกซีหัวข้อโดยการเข้าถึงคลาสหัวข้อเฉพาะจากนั้นใช้คลาสหัวข้อพร็อกซีเพื่อควบคุมการเข้าถึง
การใช้รหัส:
แพ็คเกจ MustRoxy; หัวเรื่องสาธารณะ {โมฆะสาธารณะ dosomething (); Public Subject GetProxy ();} แพ็คเกจ MustProxy; คลาสสาธารณะ RealSubject ใช้หัวเรื่อง {ชื่อสตริงส่วนตัว = null; พร็อกซีเรื่องส่วนตัว = null; @Override โมฆะสาธารณะ dosomething () {ถ้า (isproxy ()) {system.out.println (this.name + "พร็อกซี, การดำเนินการตรรกะทางธุรกิจ ... "); } else {system.out.println ("โปรดเข้าถึงพร็อกซีก่อน ... "); }} Public RealSubject (ชื่อสตริง) {this.name = name; } Public Subject GetProxy () {proxy = new proxy (this); ส่งคืนสิ่งนี้ proxy; } บูลีนส่วนตัว isproxy () {ถ้า (this.proxy == null) {return false; } else {return true; }}} แพ็คเกจ MustProxy; พร็อกซีระดับสาธารณะใช้เรื่อง {หัวเรื่องส่วนตัว realsub = null; พร็อกซีสาธารณะ (หัวข้อ realsub) {this.realsub = realsub; } โมฆะสาธารณะ dosomething () {this.realsub.dosomething (); } หัวข้อสาธารณะ getProxy () {ส่งคืนสิ่งนี้; }} แพ็คเกจ MustProxy; ไคลเอนต์ระดับสาธารณะ {โมฆะคงที่สาธารณะหลัก (สตริง [] args) {หัวเรื่อง realsub = ใหม่ realsubject ("จางซาน"); realsub.dosomething (); พร็อกซีหัวเรื่อง = realsub.getProxy (); Proxy.dosomething (); - สถานการณ์แอปพลิเคชัน
ในโลกแห่งความเป็นจริงเลขานุการเทียบเท่ากับตัวแทน หากเจ้านายจัดการประชุมให้แจ้งพนักงานของเวลานัดพบจัดสถานที่จัดเรียงสถานที่หลังการประชุมและอื่น ๆ คุณสามารถส่งมอบงานที่เกี่ยวข้องกับการประชุมให้กับเลขานุการ เจ้านายต้องจัดการประชุมเท่านั้นและไม่จำเป็นต้องทำสิ่งเหล่านั้นด้วยตนเอง ในทำนองเดียวกันในการเขียนโปรแกรมของเราเรายังสามารถใช้รูปแบบพร็อกซีเพื่อแยกรหัสที่รวมกับชุดของตรรกะที่ไม่เกี่ยวข้องเช่นรหัสบันทึกในรหัสธุรกิจสามารถทำได้ในพร็อกซี AOP ของ Spring เป็นแอปพลิเคชั่นพร็อกซีแบบไดนามิกทั่วไป
รูปแบบแอปพลิเคชันของโหมดพร็อกซี
(1) พร็อกซีระยะไกล - สามารถซ่อนความจริงที่ว่าวัตถุมีอยู่ในช่องว่างที่แตกต่างกัน นอกจากนี้ยังช่วยให้ลูกค้าสามารถเข้าถึงวัตถุบนเครื่องระยะไกล เครื่องระยะไกลอาจมีประสิทธิภาพการคำนวณที่ดีขึ้นและความเร็วในการประมวลผลและสามารถตอบสนองและประมวลผลคำขอไคลเอนต์ได้อย่างรวดเร็ว
(2) พร็อกซีเสมือนช่วยให้วัตถุที่มีค่าใช้จ่ายหน่วยความจำสูงถูกสร้างขึ้นเมื่อจำเป็น สร้างเฉพาะเมื่อเราต้องการวัตถุนี้จริงๆ
(3) พร็อกซีคัดลอกบนเขียนใช้เพื่อควบคุมการคัดลอกวัตถุโดยการชะลอการคัดลอกวัตถุจนกว่าลูกค้าจะต้องการพวกเขาจริงๆ มันเป็นตัวแปรของพร็อกซีเสมือนจริง
(4) การป้องกัน (เข้าถึง) พร็อกซี) ให้สิทธิ์ในการเข้าถึงวัตถุเป้าหมายที่แตกต่างกันสำหรับลูกค้าที่แตกต่างกัน
(5) Cache Proxy ให้ที่เก็บชั่วคราวสำหรับผลการคำนวณค่าใช้จ่าย ช่วยให้ลูกค้าหลายรายสามารถแบ่งปันผลลัพธ์เพื่อลดการคำนวณหรือเวลาแฝงเครือข่าย
(6) พร็อกซีไฟร์วอลล์ควบคุมการเข้าถึงทรัพยากรเครือข่ายและปกป้องเรื่องจากลูกค้าที่เป็นอันตราย
(7) SynchronizationProxy ให้การเข้าถึงหัวข้อที่ปลอดภัยในกรณีของมัลติเธรด
(8) พร็อกซีอ้างอิงอัจฉริยะ - เมื่อมีการอ้างอิงวัตถุจะมีการดำเนินการเพิ่มเติมบางอย่างเช่นการบันทึกจำนวนการโทรไปยังวัตถุนี้ ฯลฯ
(9) พร็อกซีซ่อนความซับซ้อนใช้เพื่อซ่อนความซับซ้อนของคอลเลกชันที่ซับซ้อนของคลาสและดำเนินการควบคุมการเข้าถึง บางครั้งมันก็เรียกว่าพร็อกซีFaçadeซึ่งไม่ยากที่จะเข้าใจ พร็อกซีที่ซ่อนเร้นและโหมดปรากฏตัวนั้นแตกต่างกันเนื่องจากการควบคุมพร็อกซีควบคุมการเข้าถึงในขณะที่โหมดปรากฏตัวแตกต่างกันเนื่องจากพร็อกซีควบคุมการเข้าถึงในขณะที่โหมดลักษณะที่ปรากฏจะมีเพียงชุดของอินเทอร์เฟซอีกชุด