UIComponent是使用者會直接接觸到的元件
如Button,TextField等,當我們在操作這些UIComponent
UIComponent 只是用來當作View顯示,而不做邏輯處理
也就是說,當接收到使用者的指令,如按鈕,輸入文字..
會把這些事件丟出去,往外通知
UIComponent..只是單純被操作
事件丟出的方式,可以是用dispatchEvent方式廣播
或是通知mediatior來處理
而Mediator的角色,就是主程式與UIComponent間的橋樑
參與者
1.Mediator 介面
createColleagus:利用這method把所有的UIComponent登錄到Mediator上
colleagusChanged:當有登錄的UIComponent狀態改變時都會呼叫這method
通知mediator作處理
public interface Mediator {
public abstract void createColleagus();
public abstract void colleagusChanged(Colleagus colleagus);
}
2.Colleagus
所有的UIComponent都implement這介面,讓UIComponent都有可以跟
mediator溝通的共同method
setColleagusEnabled:要改變UComponent不要直接去操作到UIComponent,
而是透過一個public API去操作
public interface Colleagus {
public abstract void setMediator(Mediator mediator);
public abstract void setColleagusEnabled(boolean enabled);
}
3.ColleagusTextField 實作的Colleagus
本身是TextField,同時也以自己當作TextListener
textValueChanged:當TextEvent被觸發時會執行這method
在這method中通知mediator
public class ColleagusTextField extends TextField implements Colleagus,TextListener{
private Mediator mediator;
public ColleagusTextField(String text,int columns){
super(text,columns);
}
@Override
public void setColleagusEnabled(boolean enabled) {
setEnabled(enabled);
setBackground(enabled?Color.white:Color.gray);
}
@Override
public void setMediator(Mediator mediator) {
this.mediator=mediator;
}
@Override
public void textValueChanged(TextEvent arg0) {
this.mediator.colleagusChanged(this);
}
}
4.LoginFrame 實作的Mediator
public class LoginFrame extends Frame implements Mediator,ActionListener{
private ColleagusTextField textUser;
public LoginFrame(String title){
super(title);
setBackground(Color.lightGray);
setLayout(new GridLayout(4,2));
createColleagus();
add(textUser);
pack();
setVisible(true);
}
@Override
public void colleagusChanged(Colleagus c) {
}
@Override
public void createColleagus() {
textUser=new ColleagusTextField("input user name",10);
textUser.setMediator(this);
textUser.addTextListener(textUser);
}
@Override
public void actionPerformed(ActionEvent arg0) {
}
}
5.Main 外部程式
new LoginFrame("Main Frame");
沒有留言:
張貼留言