在线不卡日本ⅴ一区v二区_精品一区二区中文字幕_天堂v在线视频_亚洲五月天婷婷中文网站

  • <menu id="lky3g"></menu>
  • <style id="lky3g"></style>
    <pre id="lky3g"><tt id="lky3g"></tt></pre>

    動手寫一個中介者模式(Java版)實現(xiàn)房子出售和業(yè)主買房信息需求

    動手寫一個中介者模式(Java版)實現(xiàn)房子出售和業(yè)主買房信息需求

    模式定義與特點

    中介者(Mediator)模式的定義:定義一個中介對象來封裝一系列對象之間的交互,使原有對象之間的耦合松散,且可以獨立地改變它們之間的交互。中介者模式又叫調(diào)停模式,它是迪米特法則的典型應用。

    主要優(yōu)點如下

  • 類之間各司其職,符合迪米特法則。
  • 降低了對象之間的耦合性,使得對象易于獨立地被復用。
  • 將對象間的一對多關(guān)聯(lián)轉(zhuǎn)變?yōu)橐粚σ坏年P(guān)聯(lián),提高系統(tǒng)的靈活性,使得系統(tǒng)易于維護和擴展。
  • 主要缺點是

    中介者模式將原本多個對象直接的相互依賴變成了中介者和多個同事類的依賴關(guān)系。當同事類越多時,中介者就會越臃腫,變得復雜且難以維護。

    模式的結(jié)構(gòu)與實現(xiàn)

    中介者模式實現(xiàn)的關(guān)鍵是找出“中介者”,下面對它的結(jié)構(gòu)和實現(xiàn)進行分析。

    1. 模式的結(jié)構(gòu)

  • 抽象中介者(Mediator)角色:它是中介者的接口,提供了同事對象注冊與轉(zhuǎn)發(fā)同事對象信息的抽象方法。
  • 具體中介者(Concrete Mediator)角色:實現(xiàn)中介者接口,定義一個 List 來管理同事對象,協(xié)調(diào)各個同事角色之間的交互關(guān)系,因此它依賴于同事角色。
  • 抽象同事類(Colleague)角色:定義同事類的接口,保存中介者對象,提供同事對象交互的抽象方法,實現(xiàn)所有相互影響的同事類的公共功能。
  • 具體同事類(Concrete Colleague)角色:是抽象同事類的實現(xiàn)者,當需要與其他同事對象交互時,由中介者對象負責后續(xù)的交互。
  • 示例1,使用interface接口實現(xiàn)方式

    /** * @descript 這是一個中介者類 * 作用1 注冊同事類 * 作用2 負責同事類之前的轉(zhuǎn)發(fā)工作 * @author 79197 */public interface Intermediary01 {public void register(Colleague01 colleague);public void transmit(Colleague01 colleague);}public class Intermediary01Implement implements Intermediary01{private List colleagueObj=new ArrayList();//注冊同事類public void register(Colleague01 colleague) {if(!colleagueObj.contains(colleague)) {colleague.setIntermediary01(this);colleagueObj.add(colleague);}}//轉(zhuǎn)發(fā)public void transmit(Colleague01 colleague) {for(Colleague01 obj:colleagueObj) {if(!obj.equals(colleague) && !obj.typeobString.equals(colleague.typeobString)) {obj.receive(colleague.send());}}}}/** * @descript 這是一個同事類 * 作用1 定義不同各類,方便區(qū)分同事類 * 作用2 聚合中介者類 * 作用3 定義和其它同事類交互的類,即發(fā)送消息的類 * 作用4 定義接收其它同事類 * @author 79197 */abstract class Colleague01 {protected Intermediary01 intermediary01;String typeobString;String nameString;String sendStringparameter;public String getSendStringparameter() {return sendStringparameter;}public void setSendStringparameter(String sendStringparameter) {this.sendStringparameter = sendStringparameter;}public Colleague01(String typeobStringparameter,String nameStringparameter) {typeobString=typeobStringparameter;nameString=nameStringparameter;}public void setIntermediary01(Intermediary01 intermediary01temp) {this.intermediary01=intermediary01temp;}public abstract String send();public abstract void receive(String sendcontext);}public class Colleague01A extends Colleague01{public Colleague01A(String typeobStringparameter,String nameStringparameter) {super(typeobStringparameter, nameStringparameter);}String sendStringparameter;public String getSendStringparameter() {return sendStringparameter;}public void setSendStringparameter(String sendStringparameter) {this.sendStringparameter = sendStringparameter;}@Overridepublic String send() {System.out.println(“我是”+super.typeobString+”方,昵稱是:”+super.nameString+”Colleague01B:發(fā)送信息是:”+getSendStringparameter());return “我是”+super.typeobString+”方,昵稱是:”+super.nameString+”Colleague01A:發(fā)送信息是:”+getSendStringparameter();}@Overridepublic void receive(String sendcontext) {System.out.println(“我是”+this.typeobString+”方,昵稱是:”+this.nameString+”Colleague01A:接口信息是:”+sendcontext);}}public class Colleague01B extends Colleague01{public Colleague01B(String typeobStringparameter,String nameStringparameter) {super(typeobStringparameter, nameStringparameter);}String sendStringparameter;public String getSendStringparameter() {return sendStringparameter;}public void setSendStringparameter(String sendStringparameter) {this.sendStringparameter = sendStringparameter;}@Overridepublic String send() {System.out.println(“我是”+super.typeobString+”方,昵稱是:”+super.nameString+”Colleague01B:發(fā)送信息是:”+getSendStringparameter());return “我是”+super.typeobString+”方,昵稱是:”+super.nameString+”Colleague01B:發(fā)送信息是:”+getSendStringparameter();}@Overridepublic void receive(String sendcontext) {System.out.println(“我是”+super.typeobString+”方,昵稱是:”+super.nameString+”Colleague01B:接口信息是:”+sendcontext);}}public class Colleague01C extends Colleague01{public Colleague01C(String typeobStringparameter,String nameStringparameter) {super(typeobStringparameter, nameStringparameter);}String sendStringparameter;public String getSendStringparameter() {return sendStringparameter;}public void setSendStringparameter(String sendStringparameter) {this.sendStringparameter = sendStringparameter;}@Overridepublic String send() {System.out.println(“我是”+super.typeobString+”方,昵稱是:”+super.nameString+”Colleague01B:發(fā)送信息是:”+getSendStringparameter());return “我是”+super.typeobString+”方,昵稱是:”+super.nameString+”Colleague01A:發(fā)送信息是:”+getSendStringparameter();}@Overridepublic void receive(String sendcontext) {System.out.println(“我是”+super.typeobString+”方,昵稱是:”+super.nameString+”Colleague01A:接口信息是:”+sendcontext);}}

    測試類

    public class IntermediaryTest {public static void main(String[] args) {Colleague01 sellerObj=new Colleague01A(“鏈家賣方”,”小明”);//sellerObj.setSendStringparameter(“長安街有一套上好的房源,正規(guī)3室一廳,感興趣的朋友可以私聊……”);Colleague01 buyerObj1=new Colleague01B(“業(yè)主”,”小張”);Colleague01 buyerObj2=new Colleague01C(“業(yè)主”,”小李”);buyerObj1.setSendStringparameter(“想購買一套房子”);Intermediary01 mediaryObj=new Intermediary01Implement();mediaryObj.register(sellerObj);mediaryObj.register(buyerObj1);mediaryObj.register(buyerObj2);mediaryObj.transmit(buyerObj1);}}

    示例2 抽象類的實現(xiàn)方式

    /** * @descript 這是一個中介者類 * 作用1 注冊同事類 * 作用2 負責同事類之前的轉(zhuǎn)發(fā)工作 * @author 79197 */abstract class Intermediary01 {abstract void register(Colleague01 colleague);abstract void transmit(Colleague01 colleague);}public class Intermediary01Implement extends Intermediary01{private List colleagueObj=new ArrayList();//注冊同事類public void register(Colleague01 colleague) {if(!colleagueObj.contains(colleague)) {colleague.setIntermediary01(this);colleagueObj.add(colleague);}}//轉(zhuǎn)發(fā)public void transmit(Colleague01 colleague) {for(Colleague01 obj:colleagueObj) {if(!obj.equals(colleague) && !obj.typeobString.equals(colleague.typeobString)) {obj.receive(colleague.send());}}}}

    鄭重聲明:本文內(nèi)容及圖片均整理自互聯(lián)網(wǎng),不代表本站立場,版權(quán)歸原作者所有,如有侵權(quán)請聯(lián)系管理員(admin#wlmqw.com)刪除。
    上一篇 2022年6月15日 15:26
    下一篇 2022年6月15日 15:26

    相關(guān)推薦

    聯(lián)系我們

    聯(lián)系郵箱:admin#wlmqw.com
    工作時間:周一至周五,10:30-18:30,節(jié)假日休息