java设计模式状态模式的具体实现

需求

某系统有电影院座位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
	}
	
	
}












运行结果

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值