บทความนี้อธิบายถึงการใช้งานฟังก์ชั่นห้องแชทหลายคนตามโหมดตัวกลาง แบ่งปันสำหรับการอ้างอิงของคุณดังนี้:
คำจำกัดความรูปแบบ
รูปแบบสื่อกลางใช้วัตถุสื่อกลางในการห่อหุ้มปฏิสัมพันธ์ระหว่างชุดของวัตถุเพื่อไม่ให้มีการแสดงอินสแตนซ์วัตถุอื่น ๆ ในแต่ละวัตถุซึ่งจะช่วยลดระดับการมีเพศสัมพันธ์ระหว่างแต่ละวัตถุและเปลี่ยนความสัมพันธ์ระหว่างวัตถุอย่างอิสระ
ตัวอย่างของโหมดที่สอง
1 การวิเคราะห์รูปแบบ
เรายืมห้องสนทนาหลายคนเพื่อแสดงรูปแบบนี้
2 โหมดการไกล่เกลี่ยไดอะแกรมคลาสคงที่
3 ตัวอย่างรหัส
3.1 อินเทอร์เฟซตัวกลาง - imediator
แพ็คเกจ com.demo.mediator; นำเข้า com.demo.colleague.iuser;/** * อินเทอร์เฟซตัวกลาง * * @author * */อินเตอร์เฟสสาธารณะ imediator {/** * ข้อมูลผู้ใช้ที่ลงทะเบียน * * @param ผู้ใช้ */การลงทะเบียนโมฆะสาธารณะ (ผู้ใช้ iuser); / *** ส่งข้อความถึงทุกคน** @param ผู้ใช้* ส่งข้อความ*/ โมฆะสาธารณะ NotifyAllMessage (ผู้ใช้ iuser);}3.2 การใช้งานตัวกลาง - concretemediator
แพ็คเกจ com.demo.mediator; นำเข้า java.util.arraylist; นำเข้า java.util.iterator; นำเข้า java.util.list; นำเข้า com.demo.colleague.iuser;/** * คลาสการใช้งานตัวกลาง arraylist <iuser> (); / ** * ข้อมูลผู้ใช้ที่ลงทะเบียน * * @param ผู้ใช้ */ Public Void Regist (ผู้ใช้ iuser) {ถ้า (ผู้ใช้! = null &&! list.contains (ผู้ใช้)) {list.add (ผู้ใช้); }} / *** ส่งข้อความ** @param ผู้ใช้* ส่งข้อความ* / โมฆะสาธารณะ NotifyAlmessage (ผู้ใช้ IUSER) {ITERATOR <IUSER> iterator = list.iterator (); iuser tmpuser = null; ในขณะที่ (iterator.hasnext ()) {tmpuser = iterator.next (); if (tmpuser! = null &&! tmpuser.equals (ผู้ใช้)) {// ยกเว้นผู้ส่งข้อความ tmpuser.receiveMessage (user.getMessage ()); }}}}3.3 ส่วนต่อประสานผู้ใช้ - IUSER
แพ็คเกจ com.demo.colleague;/** * อินเทอร์เฟซผู้ใช้ * * @author * */อินเตอร์เฟสสาธารณะ iuser {/** * รับข้อความ * * @param ข้อความ * ข้อความ */โมฆะสาธารณะรับ (ข้อความสตริง); / *** ส่งข้อความ** @param ข้อความ* ข้อความ*/ โมฆะสาธารณะ sendMessage (ข้อความสตริง); / ** * รับเนื้อหาข้อความที่ส่ง * * @return */ สตริงสาธารณะ getMessage ();}3.4 AbstractUser - AbstractUser
แพ็คเกจ com.demo.colleague; นำเข้า com.demo.mediator.imedator;/** * ข้อมูลผู้ใช้บทคัดย่อ * * @author * */บทคัดย่อระดับสาธารณะ AbstractUser ใช้ iUser {// ตัวกลางที่ได้รับการป้องกันตัวกลาง // ชื่อสตริงที่ป้องกันชื่อ; // ข้อความที่ได้รับการป้องกันข้อความสตริง; Public AbstractUser (imedator mediator, ชื่อสตริง) {this.mediator = mediator; this.name = ชื่อ; } / *** ส่งข้อความ** @param ข้อความ* ข้อความ* / โมฆะสาธารณะ sendMessage (ข้อความสตริง) {this.message = ข้อความ; System.out.println (this.name + "พูดว่า:" + this.message); mediator.notifyallMessage (นี่); } สตริงสาธารณะ getMessage () {ส่งคืนข้อความ; -3.5 ผู้ใช้ A - USERA
แพ็คเกจ com.demo.colleague; นำเข้า com.demo.mediator.imediator;/** * ผู้ใช้ A * * @author * */ชั้นเรียนสาธารณะ Usera ขยาย AbstractUser {ผู้ใช้สาธารณะ // ลงทะเบียนใน mediator.regist (นี่); } / *** รับวิธีการข้อความ* / โมฆะสาธารณะรับสัญญาณ (ข้อความสตริง) {system.out.println ("ผู้ใช้ข้อความที่ได้รับ:" + ข้อความ); -3.6 ผู้ใช้ B - UserB
แพ็คเกจ com.demo.colleague; นำเข้า com.demo.mediator.imediator;/** * ผู้ใช้ b * * @author * */ผู้ใช้ระดับสาธารณะขยาย AbstractUser {ผู้ใช้สาธารณะ // ลงทะเบียนใน Mediator Object Mediator.regist (นี่); } / *** รับวิธีการข้อความ* / โมฆะสาธารณะรับสัญญาณ (ข้อความสตริง) {System.out.println ("ผู้ใช้ B ได้รับข้อความ:" + ข้อความ); -3.7 ผู้ใช้ C - userc
แพ็คเกจ com.demo.colleague; นำเข้า com.demo.mediator.imediator;/** * ผู้ใช้ c * * @author * */คลาสสาธารณะ userc ขยาย AbstractUser {userc สาธารณะ // ลงทะเบียนใน Mediator Object Mediator.regist (นี่); } / *** รับวิธีการข้อความ* / โมฆะสาธารณะรับสัญญาณ (ข้อความสตริง) {System.out.println ("ผู้ใช้ C ได้รับข้อความ:" + ข้อความ); -3.8 ใช้ห้องสนทนาผู้เล่นหลายคน
แพ็คเกจ com.demo; นำเข้า com.demo.colleague.iuser; นำเข้า com.demo.colleague.usera; นำเข้า com.demo.colleague.userb; นำเข้า com.demo.colleague.userc; นำเข้า com.demo.mediator.cretemediator; */ไคลเอนต์คลาสสาธารณะ {/** *@param args */โมฆะคงที่สาธารณะหลัก (สตริง [] args) {// สร้างห้องแชท (ผู้ไกล่เกลี่ย) imediator mediator = ใหม่ concretemediator (); // สร้างข้อมูลผู้ใช้ iuser usera = ใหม่ usera (Mediator, "Zhang San"); IUSER USERB = ใหม่ USERB (Mediator, "Li Si"); iuser userc = ใหม่ userc (ผู้ไกล่เกลี่ย "วังวู"); System.out .println ("============================================================================================================================= - - - .println ("========================================================== - - - - - - - .println ("========================================================== - - - - - - - .println ("================================================================================4 ผลการทำงาน
-
จางซานกล่าวว่า: สวัสดีทุกคนฉันชื่อจางซาน! ฉันยังใหม่กับคุณโปรดดูแลฉัน!
ผู้ใช้ B ได้รับข้อความ: สวัสดีทุกคนชื่อของฉันคือจางซาน! ฉันยังใหม่กับคุณโปรดดูแลฉัน!
ผู้ใช้ C ได้รับข้อความ: สวัสดีทุกคนชื่อของฉันคือจางซาน! ฉันยังใหม่กับคุณโปรดดูแลฉัน!
-
-
Li Si กล่าวว่า: สวัสดีฉันชื่อ Li Si ยินดีต้อนรับเข้าร่วม!
ผู้ใช้ข้อความที่ได้รับ: สวัสดีฉันชื่อ Li Si ยินดีต้อนรับเข้าร่วม!
ผู้ใช้ C ได้รับข้อความ: สวัสดีฉันชื่อ Li Si ยินดีต้อนรับเข้าร่วม!
-
-
วังวูกล่าวว่า: ฉันวังวูยินดีต้อนรับ!
ผู้ใช้ข้อความที่ได้รับ: ฉันวังวูยินดีต้อนรับ!
ผู้ใช้ B ได้รับข้อความ: ฉันวังวูยินดีต้อนรับ!
-
สามหลักการของการออกแบบรูปแบบนี้
1 การพึ่งพาวัตถุแบบตัวต่อตัวจะถูกแปลงเป็นการพึ่งพาแบบตัวต่อตัว
2 การควบคุมส่วนกลางช่วยเพิ่มความสามารถในการนำกลับมาใช้ใหม่ของชั้นเรียน
สี่ครั้งการใช้งาน
(1) กลุ่มวัตถุสื่อสารในวิธีที่ชัดเจน แต่ซับซ้อนส่งผลให้เกิดความสับสนและยากที่จะเข้าใจโครงสร้างการพึ่งพาซึ่งกันและกัน ให้ความสนใจกับการพึ่งพาซึ่งกันและกันระหว่างวัตถุหลายชิ้น
(2) ต้องการปรับแต่งพฤติกรรมที่กระจายในหลายคลาส แต่ไม่ต้องการสร้างคลาสย่อยมากเกินไป
(3) การวิจัยและพัฒนาสถาปัตยกรรมผลิตภัณฑ์ต้องใช้โอกาสมากขึ้นในการขยาย
ไดอะแกรมคลาสคงที่ห้าโหมด
สำหรับเนื้อหาที่เกี่ยวข้องกับ Java ผู้อ่านที่สนใจในเว็บไซต์นี้สามารถดูหัวข้อ: "บทนำและการสอนขั้นสูงเกี่ยวกับการเขียนโปรแกรมเชิงวัตถุ Java", "การสอนเกี่ยวกับโครงสร้างข้อมูล Java และอัลกอริทึม" สรุปการดำเนินงานของ Java
ฉันหวังว่าบทความนี้จะเป็นประโยชน์กับการเขียนโปรแกรม Java ของทุกคน