เอเจนต์รูปแบบ Java Dynamic Agent: บทบาทแสดงถึงบทบาทอื่นเพื่อให้บรรลุฟังก์ชันเฉพาะบางอย่าง
ตัวอย่างเช่น ความสัมพันธ์ระหว่างผู้ผลิต คนกลาง และลูกค้า เมื่อลูกค้าซื้อสินค้าพวกเขาไม่ได้ติดต่อกับผู้ผลิตโดยตรงและไม่รู้ว่าผลิตภัณฑ์ผลิตอย่างไร ลูกค้าจะติดต่อกับคนกลางเท่านั้นและคนกลางสามารถบรรจุสินค้าได้ และมีบริการหลังการขายบางส่วน
รูปแบบตัวแทนมีสามบทบาท: 1. บทบาทของหัวเรื่องที่เป็นนามธรรม 2. บทบาทของหัวเรื่องตัวแทน 3. บทบาทตัวแทนที่แท้จริง
ลองมาดูความเป็นจริงของพร็อกซีแบบคงที่กัน
ฉันจะใช้รถถังเป็นตัวอย่าง
บทบาทหัวข้อบทคัดย่อ: เคลื่อนย้ายได้
ส่วนต่อประสานสาธารณะที่เคลื่อนย้ายได้ {
โมฆะย้าย();
-
TanktimeProxy คลาสสาธารณะใช้งาน Moveable {
ส่วนตัวเคลื่อนย้ายได้ t;
TanktimeProxy สาธารณะ (เคลื่อนย้ายได้ t) {
ซุปเปอร์();
นี่.t = t;
-
@แทนที่
โมฆะสาธารณะย้าย () {
นาน time1 = System.currentTimeMillis();
System.out.println("time1="+time1);
t.ย้าย();
นาน time2 = System.currentTimeMillis();
System.out.println("time2="+time2);
System.out.println("เวลาทำงานคือ:"+(time2-time1));
-
-
รถถังระดับสาธารณะนำไปใช้ได้ เคลื่อนย้ายได้{
@แทนที่
โมฆะสาธารณะย้าย () {
System.out.println("รถถังเคลื่อนที่.....");
-
-
TestTank ระดับสาธารณะ {
โมฆะคงที่สาธารณะ main (String [] args) {
ถัง t = ถังใหม่ ();
การย้ายที่เคลื่อนย้ายได้ = TanktimeProxy ใหม่ (t);
ย้าย.ย้าย();
-
-
ต่อไปฉันต้องการเพิ่มไดอารี่ก่อนและหลังเมธอด move() ของ TanK:
ฉันต้องเขียนคลาสอื่นเพื่อใช้ฟังก์ชันนี้:
TanklogProxy ระดับสาธารณะใช้งาน Moveable {
ส่วนตัวเคลื่อนย้ายได้ t;
TanklogProxy สาธารณะ (เคลื่อนย้ายได้ t) {
ซุปเปอร์();
นี่.t = t;
-
@แทนที่
โมฆะสาธารณะย้าย () {
System.out.println("เริ่มย้าย.....");
t.ย้าย();
System.out.println("สิ้นสุดการย้าย......");
-
-
TestTank ระดับสาธารณะ {
โมฆะสาธารณะคงหลัก (สตริง [] args) {
ถัง t = ถังใหม่ ();
การย้ายที่เคลื่อนย้ายได้ = TanktimeProxy ใหม่ (t);
Movet ที่เคลื่อนย้ายได้ = TanklogProxy ใหม่ (ย้าย);
movet.ย้าย();
-
-
หากฉันต้องการเพิ่มฟังก์ชันก่อนและหลังการเรียกเมธอด move() ฉันต้องเขียนบทบาทธีมเอเจนต์เพิ่มเติมหรือไม่ ซึ่งจะทำให้โค้ดหนาเกินไปและบำรุงรักษายาก ใช้เพื่อแก้ปัญหาได้หรือไม่ คำตอบคือใช่ เราสามารถสร้างบทบาทธีมตัวแทนแบบไดนามิกให้กับออบเจ็กต์พร็อกซีทั้งหมดได้
ในตอนท้ายของบทความ ฉันอยากจะแบ่งปันคำพูดตลกๆ จากโปรแกรมเมอร์: IBM และ Boeing 777
เครื่องบินโบอิ้ง 777 เป็นเครื่องบินลำแรกที่เคยออกแบบและผลิตโดยใช้คอมพิวเตอร์เสมือนจริงทั้งหมด โดยใช้อุปกรณ์ที่ IBM จัดหาให้ทั้งหมด ก่อนการบินทดสอบ ประธานของ Boeing ได้เชิญผู้อำนวยการด้านเทคนิคของ IBM อย่างกระตือรือร้นให้เข้าร่วมในการบินทดสอบ แต่หัวหน้างานกล่าวว่า: "โอ้ เป็นเกียรติอย่างยิ่ง แต่วันนั้นเป็นวันเกิดของภรรยาผม ดังนั้น..."...
CEO ของ Boeing รู้สึกโกรธเมื่อได้ยินสิ่งนี้: "คนขี้ขลาด ฉันยังไม่ได้แจ้งวันทดสอบบินให้คุณฟังเลย!"