package view.Mediator;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import org.puremvc.java.interfaces.INotification;
import org.puremvc.java.patterns.mediator.Mediator;
import common.NotiName;
import common.trace;
import userObject.User;
import view.Template.LoginWindow;
/**
* 这里使用了设计模式中的中介者Mediator模式,这个模式用来管理View中的每个控件比如text,btn,
* 处理他们的数据比如得到text的值,设置btn的监听。最后将数据发送给Controller进行业务逻辑处理。
*
* 这种模式的好处在于 将View中所有的UI都封装在了一起,
* 打个比方就是 一栋宿舍楼里每一间宿舍都是一个UI控件,宿舍楼就是一个Mediator,封装了所有的宿舍,
* 每当有人要了解具体某间宿舍的情况的时候,他们只需要访问宿舍门卫大爷,就能得知具体宿舍的情况,而不需要直接去访问那间宿舍。
* 这样就相当于Mediator为UI控件提供了统一的管理。也是达到了解耦的目的
* @author ok
*/
public class LoginMediator extends Mediator{
private static final String NAME="LoginMediator";
private LoginWindow view ;
public LoginMediator(LoginWindow v) {
super(NAME, null);
// TODO Auto-generated constructor stub
this.setViewComponent(v);
view = v;
v.setVisible(true);
v.btnLogin.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
login();
}
});
}
private void login(){
//得到所有用户登录的信息 就是界面上输入的信息
User user = new User(
view.txtName.getText(),
view.pwdPwd.getText()
);
//将这个信息发送给LoginCommand.java控制器。
//注意这个消息要在 prepControllerCommand.java中注册 建立Mediator到Command的映射关系
sendNotification(NotiName.NOTI_LOGIN,user,null);
}
//这里添加要处理的消息名字,这些消息是从Proxy中返回的
@Override
public String[] listNotificationInterests() {
String[] list = {
NotiName.LOGIN_SUCCESS, NotiName.LOGIN_FAILED
};
return list;
}
@Override
public void handleNotification(INotification noti) {
if (noti.getName().equals(NotiName.LOGIN_SUCCESS)){
trace.d("login success");
}
if (noti.getName().equals(NotiName.LOGIN_FAILED)){
trace.d("login failed " + noti.getBody().toString());
}
}
}
评论21
最新资源