รูปแบบตัวกลาง
การออกแบบเชิงวัตถุส่งเสริมการกระจายพฤติกรรมข้ามวัตถุซึ่งสามารถนำไปสู่การเชื่อมต่อระหว่างวัตถุมากมาย ในกรณีที่เลวร้ายที่สุดแต่ละวัตถุจำเป็นต้องรู้วัตถุอื่น ๆ ทั้งหมด
แม้ว่าการแยกระบบออกเป็นวัตถุจำนวนมากสามารถเพิ่มความสามารถในการนำกลับมาใช้ใหม่ได้ แต่ การเพิ่มขึ้นของวัตถุที่เชื่อมต่อระหว่างกัน จะช่วยลดการใช้ซ้ำได้ ความ สัมพันธ์การเชื่อมต่อจำนวนมากทำให้ เป็นไปไม่ได้ที่วัตถุจะทำงานโดยไม่ได้รับความช่วยเหลือจากวัตถุอื่น ๆ เนื่องจากพฤติกรรมถูกกระจายในวัตถุจำนวนมากผลลัพธ์ก็คือคลาสย่อยจำนวนมากต้องถูกกำหนดเพื่อปรับแต่งพฤติกรรมของระบบ ดังนั้นเราจึงแนะนำ ผู้ไกล่เกลี่ยวัตถุสื่อกลาง :
ผ่านวัตถุตัวกลางระบบของโครงสร้างตาข่ายสามารถเปลี่ยนเป็น โครงสร้างดาวที่มีศูนย์กลางอยู่ที่ตัวกลาง วัตถุเฉพาะแต่ละชิ้นจะไม่มีความสัมพันธ์โดยตรงกับวัตถุอื่นอีกต่อไป แต่ เป็นสื่อกลาง จากวัตถุตัวกลางอีกต่อไป การแนะนำของวัตถุตัวกลางยังทำให้โครงสร้างระบบไม่ได้รับการดัดแปลงจำนวนมากเนื่องจากการแนะนำวัตถุใหม่
โหมดสื่อกลาง: หรือที่รู้จักกันในชื่อ โหมดสื่อกลาง ใช้ วัตถุสื่อกลาง ในการห่อหุ้มปฏิสัมพันธ์ของชุดวัตถุเพื่อให้วัตถุแต่ละชิ้นไม่จำเป็นต้องแสดงและอ้างอิงซึ่งกันและกันจึง คลายการมีเพศสัมพันธ์ และ เปลี่ยนการโต้ตอบอย่างอิสระ :
(แหล่งที่มาของภาพ: รูปแบบการออกแบบ: พื้นฐานของซอฟต์แวร์เชิงวัตถุที่นำกลับมาใช้ใหม่ได้) เคล็ดลับ: เพื่อนร่วมงาน แต่ละคนเท่านั้นที่รู้การมีอยู่ของ ผู้ไกล่เกลี่ย และไม่จำเป็นต้องรู้ว่า เพื่อนร่วมงาน คนอื่นมีอยู่ (หรือวิธีการแยกพวกเขา) มันต้องส่ง ข้อความ ไปยังผู้ไกล่เกลี่ยแล้วส่งต่อไปยังเพื่อน ร่วม งาน คน อื่น ๆ
การใช้โหมด
สหประชาชาติส่งต่อแถลงการณ์จากประเทศต่างๆและไกล่เกลี่ยความสัมพันธ์กับแต่ละประเทศ:
รัฐส่งและรับข้อความไปยังคณะมนตรีความมั่นคงแห่งสหประชาชาติซึ่ง 'การร้องขอต่อไปอย่างเหมาะสม' ในระหว่างรัฐสำหรับการดำเนินการร่วมกัน:
วิทยาลัย
บทคัดย่อระดับเพื่อนร่วมงานกำหนดวิธีการสาธารณะของเพื่อนร่วมงานแต่ละคน:
/** * @author jifang * @since 16/8/28 16:22 PM */ประเทศนามธรรมระดับประเทศ {ผู้ไกล่เกลี่ยได้รับการคุ้มครองผู้ไกล่เกลี่ย; ชื่อสตริงส่วนตัว; ประเทศสาธารณะ (สหประชาชาติสื่อกลางชื่อสตริง) {this.mediator = mediator; this.name = ชื่อ; } สตริงสาธารณะ getName () {ชื่อคืน; } การป้องกันบทคัดย่อเป็นโมฆะประกาศ (MSG สตริง); Void Void ที่ได้รับการป้องกัน (String msg);}-
คอนกรีต
เพื่อนร่วมงานเฉพาะ:
•ชั้นเรียนเพื่อนร่วมงานทุกคนรู้วัตถุสื่อกลาง
•วัตถุเพื่อนร่วมงานแต่ละคนสื่อสารกับคนกลางเมื่อต้องการสื่อสารกับเพื่อนร่วมงานคนอื่น ๆ
ชั้นเรียน USA ขยายประเทศ {Public USA (Mediator สหประชาชาติ, ชื่อสตริง) {Super (Mediator, ชื่อ); } @Override โมฆะสาธารณะประกาศ (String msg) {mediator.declare (นี่, msg); } @Override โมฆะสาธารณะรับ (สตริงผงชูรส) {system.out.println ("สหรัฐอเมริกาได้รับ: [" + msg + "]"); }} คลาสอิรักขยายประเทศ {สาธารณะอิรัก (ผู้ไกล่เกลี่ยสหประชาชาติ, ชื่อสตริง) {super (ผู้ไกล่เกลี่ย, ชื่อ); } @Override โมฆะสาธารณะประกาศ (String msg) {mediator.declare (นี่, msg); } @Override โมฆะสาธารณะรับ (สตริงผงชูรส) {System.out.println ("Iraq ได้รับ: [" + msg + "]"); }} คลาสจีนขยายประเทศ {สาธารณะจีน (Mediator สหประชาชาติ, ชื่อสตริง) {super (mediator, ชื่อ); } @Override โมฆะสาธารณะประกาศ (String msg) {mediator.declare (นี่, msg); } @Override โมฆะสาธารณะรับ (สตริงผงชูรส) {system.out.println ("จีนได้รับ: [" + msg + "]"); --
ผู้ไกล่เกลี่ย
บทคัดย่อสื่อกลาง: กำหนดอินเทอร์เฟซสำหรับการสื่อสารกับวัตถุเพื่อนร่วมงาน:
Public Public Class Unitednations {รายการที่ได้รับการคุ้มครอง <ประเทศ> ประเทศ = ใหม่ LinkedList <> (); การลงทะเบียนโมฆะสาธารณะ (ประเทศประเทศ) {ประเทศ ADD (ประเทศ); } โมฆะสาธารณะลบ (ประเทศประเทศ) {ประเทศ REMOVE (ประเทศ); } Void Void ที่ได้รับการป้องกัน (ประเทศประเทศ, String msg);}-
คอนกรีต
ตัวกลางเฉพาะ:
•เข้าใจและดูแลเพื่อนร่วมงานแต่ละคน
•ตระหนักถึงพฤติกรรมการทำงานร่วมกันโดยการประสานงานวัตถุเพื่อนร่วมงานแต่ละคน (รับข้อความจากเพื่อนร่วมงานและออกคำสั่งซื้อไปยังเพื่อนร่วมงานเฉพาะ)
คลาส UnitednationsSecurityCouncil ขยายสหประชาชาติ { / ** * คณะมนตรีความมั่นคงเป็นสื่อกลางในช่วงกลาง * * @param ประเทศ * @param msg * / @Override void protected ประกาศ (ประเทศประเทศ, สตริง MSG) {สำหรับ (ประเทศที่เป็นประเทศ: ประเทศ) tocountry.receive (ชื่อ + "พูดอย่างสงบ:" + msg); - หากไม่มีการขยายตัวสื่อกลางสามารถรวมเข้ากับ concretemediator เป็นหนึ่งเดียว
•ลูกค้า
ไคลเอนต์ระดับสาธารณะ {@Test Public Void Client () {Unitedations Mediator = ใหม่ UnitedNationsSecurityCouncil (); Country USA = New USA (Mediator, "USA"); ประเทศจีน = จีนใหม่ (ผู้ไกล่เกลี่ย, "จีน"); ประเทศอิรัก = อิรักใหม่ (ผู้ไกล่เกลี่ย, "อิรัก"); Mediator.register (USA); Mediator.register (จีน); mediator.register (อิรัก); USA.Declare ("ฉันต้องการโจมตีอิรักใครสนใจว่าฉันเป็นใครรีบ !!!"); System.out.println ("----------------"); China.declare ("เราประณามอย่างยิ่ง !!!"); System.out.println ("-----------------------"); Iraq.declare ("มาเลยเจ็บกัน !!!"); --
สรุป
การเกิดขึ้นของผู้ไกล่เกลี่ยช่วยลดการมีเพศสัมพันธ์ระหว่างแต่ละวิทยาลัยทำให้เพื่อนร่วมงานและสื่อกลางเปลี่ยนไปอย่างอิสระและนำกลับมาใช้ใหม่ เนื่องจากวัตถุทำงานร่วมกันการไกล่เกลี่ยจึงถูกนำมาเป็นแนวคิดอิสระและห่อหุ้มในวัตถุจุดสนใจของความสนใจจะถูกเปลี่ยนจากพฤติกรรมของวัตถุแต่ละชิ้นเองไปสู่การมีปฏิสัมพันธ์ระหว่างพวกเขาเพื่อให้ระบบสามารถดูได้จากมุมมองของแมโครมากขึ้น
•การบังคับใช้
แบบจำลองตัวกลางใช้งานง่ายในระบบและใช้ในทางที่ผิดในระบบได้ง่าย เมื่อกลุ่มวัตถุที่ซับซ้อน "หลายถึงหลายคน" ปรากฏในระบบอย่ารีบเร่งที่จะใช้ตัวกลาง เป็นการดีที่สุดที่จะไตร่ตรองก่อนว่าการออกแบบระบบนั้นสมเหตุสมผลหรือไม่ เนื่องจาก concretemediator ควบคุมการรวมศูนย์ความซับซ้อนของปฏิสัมพันธ์กลายเป็นความซับซ้อนของตัวกลางทำให้ตัวกลางมีความซับซ้อนมากกว่า concretecolleague ใด ๆ ขอแนะนำให้ใช้แบบจำลองตัวกลางในสถานการณ์ต่อไปนี้:
◦กลุ่มของวัตถุสื่อสารในวิธีที่ชัดเจน แต่ซับซ้อน การพึ่งพาซึ่งกันและกันที่เกิดขึ้นทำให้เกิดความสับสนและเข้าใจยาก
◦วัตถุหมายถึงวัตถุอื่น ๆ อีกมากมายและสื่อสารโดยตรงกับวัตถุเหล่านี้ทำให้ยากที่จะนำวัตถุกลับมาใช้ใหม่
◦ต้องการปรับแต่งพฤติกรรมที่กระจายในหลายคลาส แต่ไม่ต้องการสร้างคลาสย่อยมากเกินไป
•โหมดที่เกี่ยวข้อง
◦Facadeนั้นแตกต่างจากผู้ไกล่เกลี่ยซึ่งเป็นนามธรรมของระบบย่อยวัตถุดังนั้นจึงให้อินเทอร์เฟซที่สะดวกยิ่งขึ้น โปรโตคอลของมันเป็นทิศทางเดียวนั่นคือวัตถุด้านหน้าจะทำการร้องขอไปยังคลาสระบบย่อยนี้ แต่ไม่เช่นนั้นก็ไม่สามารถทำได้ ในทางตรงกันข้ามผู้ไกล่เกลี่ยให้พฤติกรรมการทำงานร่วมกันที่ไม่ได้รับการสนับสนุนหรือไม่สามารถสนับสนุนได้จากวัตถุวิทยาลัยแต่ละแห่งและโปรโตคอลเป็นหลายทิศทาง
◦Colleagueสามารถสื่อสารกับคนกลางโดยใช้โหมดผู้สังเกตการณ์
ข้างต้นเป็นเนื้อหาทั้งหมดของบทความนี้ ฉันหวังว่ามันจะเป็นประโยชน์ต่อการเรียนรู้ของทุกคนและฉันหวังว่าทุกคนจะสนับสนุน wulin.com มากขึ้น