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