一个对象的行为(操作 代码执行逻辑)取决于它的状态。也就是说如果一个对象的状态发生了变化,那么该对象的行为也要发生相应的改变。
比如 在进行登录操作的时候 state=1 or state=2 or state=3
当等于1的时候 该用户角色处于校长,state等于2的时候 该用户角色为家长,state等于2的时候 该用户角色为班主任
根据每个用户角色的不同要做不同的逻辑处理 返回不同的结果集
说白了就是 代码执行的操作根据状态的改变而改变 比如 进来登录用户的角色为校长的时候 这个时候 就返回学校码 年级等信息 当登录用户的角色为班主任的时候 就返回年级班级学校码等信息
伪代码实现:
if(state=1){
return “年级/学校名称/学校区域码”;
}else if(state=2){
return “家长信息 家长的孩子信息”;
}else if(state=3) {
return “学校区域码/年级/班级”;
}
当状态越来越多的时候 (角色越来越多的时候) if else的判断逻辑就会越来越多
到后期不易扩展 形成高耦合
先看看利用状态模式来实现以上if else的代码
首先重要的一点 将不会改变的抽出来成为一个方法,将会改变的形成面向接口编程
public interface UserRoleLogin{
public void login();
}
// 老师
public UserTeacher implement UserRoleLogin(){
@Override
public void login(){
return “学校区域码/年级/班级”;
}
}
// 校长
public UserPrincipal implement UserRoleLogin(){
@Override
public void login(){
return “年级/学校名称/学校区域码”;
}
}
public class LoginContext {
private UserState mUserState = new UserTeacher ();
private static LoginContext sLoginContext = new LoginContext();private LoginContext(){}public static LoginContext getsLoginContext(){<br /> return sLoginContext;<br /> }public void login() {<br /> mUserState = new UserTeacher ();<br /> }public void logout() {<br /> mUserState = new UserPrincipal ();<br /> }public void _login_() {<br /> mUserState._login_();<br /> }<br />}
