Android的开发之&java23中设计模式------状态模式

public class Room {
    /**
     * 房间的三个状态
     */
    State freeTimeState;    //空闲状态
    State checkInState;     //入住状态
    State bookedState;      //预定状态

    State state;

    public Room(){
        freeTimeState=new FreeTimeState(this);
        checkInState=new CheckInState(this);
        bookedState=new BookedState(this);

        state=freeTimeState;//初始状态为空闲
    }

    /**
     * 预定房间
     */
    public void boookRoom(){
        state.bookRoom();
    }

    /**
     * 退订房间
     */
    public void unsubscribeRoom(){
        state.unsubscribeRoom();
    }

    /**
     * 入住
     */
    public void checkInRoom(){
        state.checkInRoom();
    }

    /**
     * 退房
     */
    public void checkOutRoom(){
        state.checkOutRoom();
    }

    public String toString(){
        return "该房间的状态是:"+getState().getClass().getName();
    }

    public State getState() {
        return state;
    }

    public void setState(State state) {
        this.state = state;
    }

    public State getFreeTimeState() {
        return freeTimeState;
    }

    public void setFreeTimeState(State freeTimeState) {
        this.freeTimeState = freeTimeState;
    }

    public State getCheckInState() {
        return checkInState;
    }

    public void setCheckInState(State checkInState) {
        this.checkInState = checkInState;
    }

    public State getBookedState() {
        return bookedState;
    }

    public void setBookedState(State bookedState) {
        this.bookedState = bookedState;
    }
}



/**
 * Created by Administrator on 2017-10-11.
 * 预定状态房间只能退定
 */

public class BookedState implements State {
    Room hotelManagement;

    public BookedState(Room hotelManagement){
        this.hotelManagement=hotelManagement;
    }

    @Override
    public void bookRoom() {
        System.out.println("该房间已近给预定了...");
    }

    @Override
    public void unsubscribeRoom() {
        System.out.println("退订成功,欢迎下次光临...");
        hotelManagement.setState(hotelManagement.getFreeTimeState()); //变成空闲状态
    }

    @Override
    public void checkInRoom() {
        System.out.println("入住成功...");
        hotelManagement.setState(hotelManagement.getCheckInState());
    }

    @Override
    public void checkOutRoom() {
        //不需要做操作
    }
}
/**
 * Created by Administrator on 2017-10-11.
 * 入住可以退房
 */

public class CheckInState implements State {
    Room hotelManagement;

    public CheckInState(Room hotelManagement){
        this.hotelManagement=hotelManagement;
    }

    @Override
    public void bookRoom() {
        System.out.println("该房间已经入住了...");
    }

    @Override
    public void unsubscribeRoom() {
        //不需要做操作
    }

    @Override
    public void checkInRoom() {
        System.out.println("该房间已经入住了...");
    }

    @Override
    public void checkOutRoom() {
        System.out.println("退房成功...");
        hotelManagement.setState(hotelManagement.getFreeTimeState());
    }
}
public class FreeTimeState implements State {
    Room hotelManagement;

    public FreeTimeState(Room hotelManagement){
        this.hotelManagement=hotelManagement;
    }
    @Override
    public void bookRoom() {
        System.out.print("您已经成功预定了");
        //状态变为已预定
        hotelManagement.setState(hotelManagement.getBookedState());
    }

    @Override
    public void unsubscribeRoom() {
        //不需要做操作
    }

    @Override
    public void checkInRoom() {
        System.out.print("您已经成功入住了");
        //状态变为已入住
        hotelManagement.setState(hotelManagement.getCheckInState());
    }

    @Override
    public void checkOutRoom() {
        //不需要做操作
    }
}
public interface State {
    /**
     * 预订房间
     */
    public void bookRoom();

    /**
     * 退订房间
     */
    public void unsubscribeRoom();

    /**
     * 入住
     */
    public void checkInRoom();

    /**
     * 退房
     */
    public void checkOutRoom();
}
public class StateMethodActivity extends AppCompatActivity {

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_state_method);
        //有2间房
        Room[] rooms=new Room[2];
        //初始化
        for (int i=0;i<rooms.length;i++){
            rooms[i]=new Room();
        }
        //第一间房
        rooms[0].boookRoom();//预定
        rooms[0].checkInRoom();//入住
        rooms[0].boookRoom();//预定
        System.out.print(rooms[0]);
        System.out.print("**********************************");
        //第二间房
        rooms[1].checkInRoom();
        rooms[1].boookRoom();
        rooms[1].checkOutRoom();
        rooms[1].boookRoom();
        System.out.print(rooms[1]);
    }
}

github地址:https://github.com/zyj18410105150/DesignMode

发布了68 篇原创文章 · 获赞 17 · 访问量 9万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章