摘要:中介者模式就是簡化這種關系的模式,有兩個角色關系成員中介者。成員,不必包含與他有關系的成員,他只需包含一個中介者,通過中介發(fā)消息,是委托給中介。他有一個發(fā)消息的方法,中介通過判定成員來確定恢復消息。
先看圖:
有很多孤立的人這里是3個,如果有100個,是不是圖很復雜,那在程序中表示出來就很難。明顯用右圖很明了。
中介者模式就是簡化這種關系的模式,有兩個角色:關系成員、中介者。我一般喜歡從語法上分析:
中介者:包含每一個關系成員,要處理所有的關系,就要包含是所有的成員。只有一個方法
abstract class Mediator { abstract void call(String string, Person person); }
具體中介者:call是處理關系的,主要的方法。
public class AllMediator extends Mediator {
Aperson aperson;
Bperson bperson;
Cperson cperson;
public Aperson getAperson() {
return aperson;
}
public void setAperson(Aperson aperson) {
this.aperson = aperson;
}
public Bperson getBperson() {
return bperson;
}
public void setBperson(Bperson bperson) {
this.bperson = bperson;
}
public Cperson getCperson() {
return cperson;
}
public void setCperson(Cperson cperson) {
this.cperson = cperson;
}
@Override
void call(String string, Person person) {
if (person == aperson) {
aperson.re(string);
} else if (person == bperson) {
bperson.re(string);
} else if (person == cperson) {
cperson.re(string);
}
}
}
成員,不必包含與他有關系的成員,他只需包含一個中介者,通過中介發(fā)消息,是委托給中介。他有一個發(fā)消息的方法,中介通過判定成員來確定恢復消息。
abstract class Person { String name; Mediator mediator; Person(String name, Mediator mediator) { this.mediator = mediator; this.name = name; } abstract void call(String mess); abstract void re(String mess); }
A:
public class Aperson extends Person {
Aperson(String name, Mediator mediator) {
super(name, mediator);
}
@Override
void call(String mess) {
mediator.call(mess, this);
}
@Override
void re(String mess) {
System.out.println(name + ":" + mess);
}
}
B:
public class Bperson extends Person {
Bperson(String name, Mediator mediator) {
super(name, mediator);
}
@Override
void call(String mess) {
mediator.call(mess, this);
}
@Override
void re(String mess) {
System.out.println(name + ":" + mess);
}
}
C:
public class Cperson extends Person {
Cperson(String name, Mediator mediator) {
super(name, mediator);
}
@Override
void call(String mess) {
mediator.call(mess, this);
}
@Override
void re(String mess) {
System.out.println(name + ":" + mess);
}
}
測試
class Test {
public static void main(String[] args) {
AllMediator mediator = new AllMediator();
Aperson aperson = new Aperson("A同學", mediator);
Bperson bperson = new Bperson("B同學", mediator);
Cperson cperson = new Cperson("C同學", mediator);
mediator.setAperson(aperson);
mediator.setBperson(bperson);
mediator.setCperson(cperson);
aperson.call("告訴B,我明天不去了");
bperson.call("告訴C,我明天不去了");
}
}
結果:
A同學:告訴B,我明天不去了
B同學:告訴C,我明天不去了
note:只要不放棄,就沒有什么能讓自己退縮;只要夠堅強,就沒有什么能把自己打垮!
文章版權歸作者所有,未經(jīng)允許請勿轉載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/7328.html
摘要:里氏替換原則里氏代換原則面向對象設計的基本原則之一。里氏代換原則中說,任何基類可以出現(xiàn)的地方,子類一定可以出現(xiàn)。里氏代換原則是對開閉原則的補充。而基類與子類的繼承關系就是抽象化的具體實現(xiàn),所以里氏代換原則是對實現(xiàn)抽象化的具體步驟的規(guī)范。 showImg(https://segmentfault.com/img/bVbuXAu?w=640&h=361); 本文為本次系列文章的第一篇,接下...
摘要:里氏代換原則里氏代換原則面向對象設計的基本原則之一。里氏代換原則中說,任何基類可以出現(xiàn)的地方,子類一定可以出現(xiàn)。里氏代換原則是對開閉原則的補充。而基類與子類的繼承關系就是抽象化的具體實現(xiàn),所以里氏代換原則是對實現(xiàn)抽象化的具體步驟的規(guī)范。 一、設計模式的六大原則: 1、開閉原則(Open Close Principle) 開閉原則就是說對擴展開放,對修改關閉。在程序需要進行拓展的時候,不...
摘要:十開放模式識別項目開放模式識別項目,致力于開發(fā)出一套包含圖像處理計算機視覺自然語言處理模式識別機器學習和相關領域算法的函數(shù)庫。 一、開源生物特征識別庫 OpenBROpenBR 是一個用來從照片中識別人臉的工具。還支持推算性別與年齡。使用方法:$ br -algorithm FaceRecognition -compare me.jpg you.jpg二、計算機視覺庫 OpenCVOpenC...
摘要:推文用設計模式解構三國是一種什么體驗行為型設計模式一策略模式工廠模式優(yōu)化結構狀態(tài)模式隨著狀態(tài)改變而改變行為。推文狀態(tài)機與狀態(tài)模式責任鏈模式多個對象依次處理請求前者指定后者。代理模式代理針對一個對象,為了增加控制等中介雙方都是多個,為了解耦。 策略模式 選擇使用封裝好的一系列算法,可相互替換。 類比:商店[Context]買完衣服買單[Stratege](現(xiàn)金[Concrete Stra...
摘要:本題目的考察點在于函數(shù)的格式輸出規(guī)則。方法改變隨機數(shù)生成器的種子,可以在調用其他隨機模塊函數(shù)之前調用此函數(shù)。參數(shù)改變隨機數(shù)生成器的種子。返回一個至區(qū)間包含和的整數(shù)。 ...
閱讀 2135·2021-10-14 09:43
閱讀 2197·2019-08-30 15:55
閱讀 726·2019-08-30 14:23
閱讀 2019·2019-08-30 13:21
閱讀 1235·2019-08-30 12:50
閱讀 2199·2019-08-29 18:46
閱讀 2280·2019-08-29 17:28
閱讀 2359·2019-08-29 17:21