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萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章