一个对象的行为(操作 代码执行逻辑)取决于它的状态。也就是说如果一个对象的状态发生了变化,那么该对象的行为也要发生相应的改变。
    比如 在进行登录操作的时候 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 ();

    1. private static LoginContext sLoginContext = new LoginContext();
    2. private LoginContext(){
    3. }
    4. public static LoginContext getsLoginContext(){<br /> return sLoginContext;<br /> }
    5. public void login() {<br /> mUserState = new UserTeacher ();<br /> }
    6. public void logout() {<br /> mUserState = new UserPrincipal ();<br /> }
    7. public void _login_() {<br /> mUserState._login_();<br /> }<br />}