1. 程式人生 > 實用技巧 >16、Mediator 仲裁者模式

16、Mediator 仲裁者模式

Mediator

調 Mediator

Mediator Mediator
Colleague Colleague
ColleagueButton Colleague ConcreteColleague
ColleagueTextField Colleague
ConcreteColleague
ColleagueCheckbox Colleague ConcreteColleague
LoginFrame Mediator ConcreteMediator
Main

Mediator.java

packagemediator;

publicinterfaceMediator{
publicabstractvoidcreateColleague();
publicabstractvoidcolleagueChanged();
}

Colleague.java

packagemediator;

publicinterfaceColleague{
publicabstractvoidsetMediator(Mediatormediator);
publicabstractvoidsetColleagueEnabled(booleanenabled);
}

ColleagueButton.java

packagemediator;

importjava.awt.*;

publicclassColleagueButtonextendsButtonimplementsColleague{
privateMediatormediator;
publicColleagueButton(Stringcaption){
super(caption);
}
publicvoidsetMediator(Mediatormediator){
this.mediator=mediator;
}
publicvoidsetColleagueEnabled(booleanenabled){
setEnabled(enabled);
}
}

ColleagueTextField.java

packagemediator;

importjava.awt.*;
importjava.awt.event.TextEvent;
importjava.awt.event.TextListener;

publicclassColleagueTextFieldextendsTextFieldimplementsTextListener,Colleague{
privateMediatormediator;
publicColleagueTextField(Stringtext,intcolumns){
super(text,columns);
}
publicvoidsetMediator(Mediatormediator){
this.mediator=mediator;
}
publicvoidsetColleagueEnabled(booleanenabled){
setEnabled(enabled);
setBackground(enabled?Color.WHITE:Color.lightGray);
}
publicvoidtextValueChanged(TextEvente){
mediator.colleagueChanged();
}
}

ColleagueCheckbox.java

packagemediator;

importjava.awt.*;
importjava.awt.event.ItemEvent;
importjava.awt.event.ItemListener;

publicclassColleagueCheckboxextendsCheckboximplementsItemListener,Colleague{
privateMediatormediator;
publicColleagueCheckbox(Stringcaption,CheckboxGroupgroup,booleanstate){
super(caption,group,state);
}
publicvoidsetMediator(Mediatormediator){
this.mediator=mediator;
}
publicvoidsetColleagueEnabled(booleanenabled){
setEnabled(enabled);
setBackground(enabled?Color.WHITE:Color.lightGray);
}
publicvoiditemStateChanged(ItemEvente){
mediator.colleagueChanged();
}
}

LoginFrame.java

packagemediator;

importjava.awt.*;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;

publicclassLoginFrameextendsFrameimplementsActionListener,Mediator{
privateColleagueCheckboxcheckGuest;
privateColleagueCheckboxcheckLogin;
privateColleagueTextFieldtextUser;
privateColleagueTextFieldtextPass;
privateColleagueButtonbuttonOk;
privateColleagueButtonbuttonCancel;

//
//Colleague
publicLoginFrame(Stringtitle){
super(title);
setBackground(Color.lightGray);
setLayout(newGridLayout(4,2));
createColleague();
add(checkGuest);
add(checkLogin);
add(newLabel("Username:"));
add(textUser);
add(newLabel("Password:"));
add(textPass);
add(buttonOk);
add(buttonCancel);
colleagueChanged();
pack();
show();
}

publicvoidcreateColleague(){
CheckboxGroupg=newCheckboxGroup();
checkGuest=newColleagueCheckbox("Guest",g,true);
checkLogin=newColleagueCheckbox("Login",g,false);
textUser=newColleagueTextField("",10);
textPass=newColleagueTextField("",10);
textPass.setEchoChar('*');
buttonOk=newColleagueButton("OK");
buttonCancel=newColleagueButton("Cancel");
checkGuest.setMediator(this);
checkLogin.setMediator(this);
textUser.setMediator(this);
textPass.setMediator(this);
buttonOk.setMediator(this);
buttonCancel.setMediator(this);
checkGuest.addItemListener(checkGuest);
checkLogin.addItemListener(checkLogin);
textUser.addTextListener(textUser);
textPass.addTextListener(textPass);
buttonOk.addActionListener(this);
buttonCancel.addActionListener(this);
}

publicvoidcolleagueChanged(){
if(checkGuest.getState()){
textUser.setColleagueEnabled(false);
textPass.setColleagueEnabled(false);
buttonOk.setColleagueEnabled(true);
}else{
textUser.setColleagueEnabled(true);
userpassChanged();
}
}

privatevoiduserpassChanged(){
if(textUser.getText().length()>0){
textPass.setColleagueEnabled(true);
if(textPass.getText().length()>0){
buttonOk.setColleagueEnabled(true);
}else{
buttonOk.setColleagueEnabled(false);
}
}else{
textPass.setColleagueEnabled(false);
buttonOk.setColleagueEnabled(false);
}
}

publicvoidactionPerformed(ActionEvente){
System.out.println(e.toString());
System.exit(0);
}
}

Main.java

packagemediator;

publicclassMain{
staticpublicvoidmain(Stringargs[]){
newLoginFrame("MediatorSample");
}
}

Mediator

  1. Mediator()

    Mediator Colleague

  2. ConcreteMediator()

    ConcreteMediator Mediator

  3. Colleague()

    Colleague Mediator

  4. ConcreteColleague()

    ConcreteColleague Colleague

Bug

ConcreteColleague ConcreteMediator

公眾號發哥講

這是一個稍偏基礎和偏技術的公眾號,甚至其中包括一些可能閱讀量很低的包含程式碼的技術文,不知道你是不是喜歡,期待你的關注。

如果你覺得文章還不錯,就請點選右上角選擇傳送給朋友或者轉發到朋友圈~

● 掃碼關注我們

據說看到好文章不推薦的人,伺服器容易宕機!

本文版權歸發哥講部落格園共有,原創文章,未經允許不得轉載,否則保留追究法律責任的權利。