java mediator_java—mediator中介模式
中介者模式是由GoF提出的23種軟件設計模式的一種。Mediator模式是行為模式之一,Mediator模式定義:用一個中介者對象來封裝一系列的對象交互。中介者使各對象不需要顯式的相互引用,從而使其耦合松散,而且可以獨立的改變他們之間的交互。
適用性
1)一組對象以定義良好但是復雜的方式進行通信。產生的相互依賴關系結構混亂且難以理解。
2)一個對象引用其他很多對象并且直接與這些對象通信,導致難以復用該對象。
3)想定制一個分布在多個類的行為,而又不想生成太多的子類。
結構圖如下
colleague向一個中介者對象發送和接受請求。中介者在各個colleague間適當的轉發請求以實現協作行為。
優缺點
1)減少了子類生成Mediator將原本分布于多個對象間的行為集中在一起,改變這些行為只需生成Mediator的子類即可,這樣各個Colleague類可被重用。
2)它將各Colleague解耦。Mediator有利于各Colleague間的松耦合,你可以獨立的改變和復用各Colleague類和Mediator類。
3)它簡化了對象協議用Mediator和各Colleague間的一對多的交互來代替多對多的交互。一對多的關系更易于理解、維護和擴展。
4)它對對象如何協作進行了抽象將中介作為一個獨立的概念并將其封裝在一個對象中,使你將注意力從對象各自本身的行為轉移到它們之間的交互上來。這有助于弄清楚一個系統中的對象是如何交互的。
5)它使控制集中化,中介者模式將交互的復雜性變為中介者的復雜性。因為中介者封裝了協議,它可能變得比任一個Colleague都復雜。這可能使得中介者自身成為一個難于維護的龐然大物。
1、Colleague.java:
package mediator;
public abstract class Colleague {
private Mediator mediator;
private String message;
public Colleague(Mediator m){
mediator = m;
}
public Mediator getMediator(){
return mediator;
}
public String getMessage(){
return message;
}
public void setMessage(String message){
this.message = message;
}
public abstract void sendMsg(Colleague colleague);
public abstract void getMsg(Colleague colleague);
}
2、Colleague的子類:Colleague1,Colleague2,Colleague3
package mediator;
public class Colleague1 extends Colleague{
public Colleague1(Mediator m){
super(m);
}
@Override
public void getMsg(Colleague colleague) {
getMediator().action(colleague,0);
//System.out.println("Colleague1 has got the message-"+"");
}
@Override
public void sendMsg(Colleague colleague) {
getMediator().action(colleague,1);
//System.out.println("Colleague1 has send the message "+msg+"");
}
}
package mediator;
public class Colleague2 extends Colleague{
public Colleague2(Mediator m){
super(m);
}
@Override
public void getMsg(Colleague colleague) {
getMediator().action(colleague,0);
//System.out.println("Colleague2 has got the message-"+"");
}
@Override
public void sendMsg(Colleague colleague) {
getMediator().action(colleague,1);
//System.out.println("Colleague2 has send the message "+msg+"");
}
}
package mediator;
public class Colleague3 extends Colleague{
public Colleague3(Mediator m){
super(m);
}
@Override
public void getMsg(Colleague colleague) {
getMediator().action(colleague,0);
//System.out.println("Colleague3 has got the message-"+"");
}
@Override
public void sendMsg(Colleague colleague) {
getMediator().action(colleague,1);
//System.out.println("Colleague3 has send the message "+msg+"");
}
}
3、Mediator抽象類:
package mediator;
public abstract class Mediator {
/**
* @param sender
* @param flag?? 0是讀,1是發送
*/
public abstract void action(Colleague sender,int flag);//mediator針對colleague的一個交互行為
public abstract void addCollegue(Colleague colleague);//加入mediator對象
}
4、Mediator的子類:
package mediator;
import java.util.ArrayList;
import java.util.List;
public class ConcreteMediator extends Mediator{
private List? member = new ArrayList();
@Override
public void action(Colleague sender,int flag) {
String msg = sender.getMessage();
for(Colleague colleague : member){
if(colleague.equals(sender)){
if(flag==0){
System.out.println("這是從"+sender+"接收到的消息:"+sender.getMessage());
}else{
sender.setMessage("test.......");
}
break;
}
}
}
@Override
public void addCollegue(Colleague colleague) {
member.add(colleague);
}
}
5、測試類:
package mediator;
public class MediatorTEST {
public static void main(String[] args){
Mediator mediator = new ConcreteMediator();
Colleague colleague1 = new Colleague1(mediator);
Colleague colleague2 = new Colleague2(mediator);
Colleague colleague3 = new Colleague3(mediator);
mediator.addCollegue(colleague1);
mediator.addCollegue(colleague2);
mediator.addCollegue(colleague3);
// Colleague1 觸發行為
colleague1.setMessage("嗨,大家好!");
// Colleague2 觸發行為
colleague2.setMessage("很高興見到你!");
// Colleague3 觸發行為
colleague3.setMessage("我們一起玩游戲吧!");
colleague1.getMsg(colleague2);
colleague1.sendMsg(colleague2);
colleague1.getMsg(colleague2);
}
}
總結
以上是生活随笔為你收集整理的java mediator_java—mediator中介模式的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 怎么申请信用卡最快 怎么申请信用卡比较容
- 下一篇: php 自动验证类,Thinkphp实现