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