需求
某系统有电影院座位10个,下方有按钮 购买和退订,如果座位未被购买,则可以被购买,不能退订,如果被购买,则只能退订,不能购买。选中某个座位后可以点击下方的退订或购买按钮。
请用相关的设计模式实现上面的需求,若没有图形界面,可以用键盘数字按键输入模拟选中的座位,用键盘输入的字母g表示购买按钮,t表示退订按钮的按下。
实现
代码
package room;
import java.util.Scanner;
public class room {
public static void main(String []args) {
RoomContext room[]=new RoomContext[10];//10个房间
for(int i=0;i<10;i++)
{
room[i]=new RoomContext();//这里必须得给每一个房间分配一下空间,不然报错
room[i].setstate(new free(room[i]));//每个房间初始化是空闲的
}
Scanner in=new Scanner(System.in);
int pd=0;
while(pd==0) {
//结束模块
System.out.println("输入back退出系统 输入别的则进入系统");
String str=in.next();
if(str.equals("back"))
{
System.out.println("结束");
break;
}
//操作模块
System.out.println("欢迎来到房间预定系统我是你的小助手,小磊");
/*选择房间*/ System.out.println("输入房间号(数字1到10)");
int hm=in.nextInt();
/*操作房间 */ int pdd=0;
while(pdd==0) {
System.out.println("输入g购买座位,输入look查看总体,输入t退订座位,输入quit退出该房间的操作");
String cz=in.next();
if(cz.equals("g")) { room[hm-1].checkin();}//因为输入的是1到10所有都j'q
if(cz.equals("t")) {room[hm-1].checkout();}
if(cz.equals("quit")) {System.out.println("结束"); break;}
if(cz.equals("look")) {
for(int i=0;i<10;i++) {
System.out.println(i+1+":"+room[i].name); }
}
}
}
}
}
class RoomState{
private String ing;
public String geting() {return this.ing;} //查看当前状态
public void seting(String ing) {this.ing=ing;}//定义状态
//默认都不能;
public void checkout() {
}
public void checkin() {
}
}
class RoomContext{
private RoomState state;
public RoomState getRoomState() {return this.state;} //查看当前状态
public void setstate(RoomState st) {
this.state=st;
}
String name="空闲";
public void checkout() {
state.checkout();
}
public void checkin() {
state.checkin();
}
}
class live extends RoomState{
private RoomContext room;
public live(RoomContext room) {this.room=room;
this.seting("购买");
}
public void checkout() {
room.name="空闲";
System.out.println("退票成功,当前座位是空闲状态");
System.out.println("*********************");
room.setstate(new free(room));//将room的state设成free
}
public void checkin() {
System.out.println("不能购买该座位是购买状态");
}
}
class free extends RoomState{
private RoomContext room;
public free() {};
public free(RoomContext room) {this.room=room;
this.seting("空闲");
}
public void sett(RoomContext room) {this.room=room;
this.seting("空闲");
}
public void checkout() {
System.out.println("不能退票该座位没有被购买");
}
public void checkin() {
room.name="已购买";
System.out.println("购买成功,当前座位已购买");
System.out.println("*********************");
room.setstate(new live(room));//将room的state设成free
}
}
运行结果