關(guān)鍵詞的分類和優(yōu)化seo關(guān)鍵詞首頁排名代發(fā)
🚀簡介

?
- 抽象中介者(Mediator)角色:它是中介者的接口,提供了同事對象注冊與轉(zhuǎn)發(fā)同事對象信息的抽象方法。
- 具體中介者(ConcreteMediator)角色:實(shí)現(xiàn)中介者接口,定義一個(gè) List 來管理同事對象,協(xié)調(diào)各個(gè)同事角色之間的交互關(guān)系,因此它依賴于同事角色。
- 抽象同事類(Colleague)角色:定義同事類的接口,保存中介者對象,提供同事對象交互的抽象方法,實(shí)現(xiàn)所有相互影響的同事類的公共功能。
- 具體同事類(Concrete Colleague)角色:是抽象同事類的實(shí)現(xiàn)者,當(dāng)需要與其他同事對象交互時(shí),由中介者對象負(fù)責(zé)后續(xù)的交互。
🚀案例
public abstract class Mediator
{//聲明一個(gè)聯(lián)絡(luò)方法public abstract void Contact(string message, Person person);
}
🐤具體中介者(ConcreteMediator)角色
MediatorStructure類是一個(gè)中介者,它有兩個(gè)屬性,一個(gè)是房主(HouseOwner),一個(gè)是租客(Tenant)。當(dāng)房主和租客需要通信時(shí),他們不直接通信,而是通過MediatorStructure這個(gè)中介者來傳遞信息。
Contact方法是中介者的核心方法,它接收兩個(gè)參數(shù),一個(gè)是消息內(nèi)容,一個(gè)是發(fā)送消息的人。如果發(fā)送消息的人是房主,那么這個(gè)消息就會(huì)被傳遞給租客;如果發(fā)送消息的人是租客,那么這個(gè)消息就會(huì)被傳遞給房主。這樣就實(shí)現(xiàn)了房主和租客之間的間接通信。
public class MediatorStructure : Mediator
{public HouseOwner houseOwner { get; set; }public Tenant tenant { get; set; }public override void Contact(string message, Person person){if (person == houseOwner){tenant.GetMessage(message);}else{houseOwner.GetMessage(message);}}
}
🐤抽象同事類(Colleague)角色
public abstract class Person
{protected string name;protected Mediator mediator;public Person(string name, Mediator mediator){this.name = name;this.mediator = mediator;}
}
🐤具體同事類(Concrete Colleague)角色
HouseOwner(房屋擁有者)和Tenant(承租人)。這兩個(gè)類都繼承自Person類,并且都有一個(gè)Mediator類型的成員變量,用于與中介者進(jìn)行通信。
HouseOwner類有兩個(gè)方法,一個(gè)是Contact,用于與中介者聯(lián)系,另一個(gè)是GetMessage,用于獲取信息。在Contact方法中,會(huì)調(diào)用mediator的Contact方法,將自己和消息傳遞給中介者。在GetMessage方法中,會(huì)打印出自己獲取到的信息。
//具體同事類 房屋擁有者
public class HouseOwner : Person
{public HouseOwner(string name, Mediator mediator) : base(name, mediator) { }//與中介者聯(lián)系public void Contact(string message){mediator.Contact(message, this);}//獲取信息public void GetMessage(string message){Console.WriteLine("房主" + name + "獲取到的信息:" + message);}
}//具體同事類 承租人
public class Tenant : Person
{public Tenant(string name, Mediator mediator) : base(name, mediator) { }//與中介者聯(lián)系public void Contact(string message){mediator.Contact(message, this);}//獲取信息public void GetMessage(string message){Console.WriteLine("租房者" + name + "獲取到的信息:" + message);}
}
👻測試類
在測試類中,有三個(gè)角色:房主(HouseOwner)、租戶(Tenant)和中介(Mediator)。房主和租戶都只需要知道中介即可,他們之間的所有交互都通過中介來進(jìn)行。
在Main函數(shù)中,首先創(chuàng)建了一個(gè)中介機(jī)構(gòu)(mediator),然后創(chuàng)建了一個(gè)名為張三的房主(houseOwner)和一個(gè)名為李四的租戶(tenant),他們都知道這個(gè)中介機(jī)構(gòu)。
然后,中介機(jī)構(gòu)需要知道房主和租戶,所以設(shè)置了mediator的houseOwner和tenant屬性。
class MyClass
{public static void Main(string[] args){//一個(gè)房主、一個(gè)租房者、//一個(gè)中介機(jī)構(gòu)MediatorStructure mediator = new MediatorStructure();//房主和租房者只需要知道中介機(jī)構(gòu)即可HouseOwner houseOwner = new HouseOwner("張三", mediator);Tenant tenant = new Tenant("李四", mediator);//中介結(jié)構(gòu)要知道房主和租房者mediator.houseOwner = houseOwner;mediator.tenant = tenant;tenant.Contact("需要租三室的房子");houseOwner.Contact("我這有三室的房子,你需要租嗎?");}
}
🐳運(yùn)行結(jié)果
🚀優(yōu)缺點(diǎn)
- 它支持以不同的方式遍歷一個(gè)聚合對象,在同一個(gè)聚合對象上可以定義多種遍歷方式。在迭代器模式中只需要用一個(gè)不同的迭代器來替換原有迭代器即可改變遍歷算法,我們也可以自己定義迭代器 的子類以支持新的遍歷方式。
- 迭代器簡化了聚合類。由于引入了迭代器,在原有的聚合對象中不需要再自行提供數(shù)據(jù)遍歷等方法,這樣可以簡化聚合類的設(shè)計(jì)。
- 在迭代器模式中,由于引入了抽象層,增加新的聚合類和迭代器類都很方便,無須修改原有代碼,滿足 “開閉原則” 的要求。
- 增加了類的個(gè)數(shù),這在一定程度上增加了系統(tǒng)的復(fù)雜性。
- 當(dāng)需要為聚合對象提供多種遍歷方式時(shí)。
- 當(dāng)需要為遍歷不同的聚合結(jié)構(gòu)提供一個(gè)統(tǒng)一的接口時(shí)。
- 當(dāng)訪問一個(gè)聚合對象的內(nèi)容而無須暴露其內(nèi)部細(xì)節(jié)的表示時(shí)。