模拟招商银行叫号业务办理流程

/************************招商银行窗口类,包括接待窗口和业务办理窗口************************************/
接口:
/**
 * 招商银行窗口统一接口规范,规定每个窗口都提供service方法
 * @author qiaoyupeng
 *
 */
public interface Window {

	public void service();
}
实现类:抽象类+具体实现
import com.cmboa.control.Controller;
import com.cmboa.window.Window;

public abstract class AbstractWindow implements Window {

	protected Controller controller;
	
	@Override
	public void service() {
		controller.run(this);
	}

}

import com.cmboa.control.Controller;
import com.cmboa.control.impl.SelectSequenceServerControl;
import com.cmboa.window.Window;

/**
 * 此类代表招商银行工作人员窗口,业务员可以在这里选择业务类型
 * 服务器会从该业务类型的队列中选择并返回一个序列号对象
 * 若返回为NULL,则提示切换业务类型
 * 若返回非NULL,开始叫号,客户听到叫号后,过来办理相应的业务
 * @author qiaoyupeng
 *
 */
public class BankWindow extends AbstractWindow {

	public int id; // the id of the bankwindow,tell customer where go
	
	public BankWindow(){
		controller = new SelectSequenceServerControl();
	}
}

import com.cmboa.control.Controller;
import com.cmboa.control.impl.CreateSequenceServerControl;
import com.cmboa.window.Window;
/**
 * 此类代表招商银行门口接待窗口,客户可在这里选择需办的业务
 * 服务器会自动产生出该业务类型的序号,客户只需等待叫号即可。
 * @author qiaoyupeng
 *
 */
public class Door extends AbstractWindow {

	public Door(){
		controller = new CreateSequenceServerControl(); 
	}
}

/*******************************业务模块,控制器************************************/
接口:
package com.cmboa.control;

import com.cmboa.window.Window;

public interface Controller {

	public void init();
	public void run( Window windown);
	
}
实现类:
package com.cmboa.control.impl;

import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

import com.cmboa.control.Controller;
import com.cmboa.domain.BusinessObject;
import com.cmboa.domain.DepositMoneyBusiness;
import com.cmboa.domain.FetchMoneyBussiness;
import com.cmboa.service.Service;
import com.cmboa.service.impl.DepositMoneyService;
import com.cmboa.service.impl.FetchMoneyService;
import com.cmboa.view.ViewTemplate;
import com.cmboa.vo.Sequence;

public abstract class AbstractControl implements Controller{
	
	protected boolean isRun;
	protected ViewTemplate viewTemplate;
	protected BusinessObject deposit = new DepositMoneyBusiness(1,"Deposite Money");
	protected BusinessObject fetch = new FetchMoneyBussiness(2,"Fetch Money");
	protected Service depositMoneyService = new DepositMoneyService();
	protected Service fetchMoneyService = new FetchMoneyService();
	protected Scanner scan = new Scanner(System.in); 
	
	public AbstractControl(){
		init();
	}
	
		
	public void init(){
		// get all of the business-obj,then put them into the list 
		List<BusinessObject> businessList = new ArrayList<BusinessObject>();
		businessList.add(deposit);
		businessList.add(fetch);
		
		// use the viewTemplate to display the data in the list
		viewTemplate.display(businessList);
	}
	
	

}

package com.cmboa.control.impl;

import com.cmboa.vo.Sequence;
import com.cmboa.window.Window;
/**
 * the server for customer,you can select your service from this.
 * you will be given a seq-number by this,save it ok.
 * @author qiaoyupeng
 *
 */
public class CreateSequenceServerControl extends AbstractControl{
	
	public void run( Window window ){
		isRun = true;
		Sequence seq = null;
		int inputNumber = 0;
		while( isRun ){
			try {
				// get the key that the user have inputed
				inputNumber = scan.nextInt();
				if( inputNumber != -1 ){
					// given the service by the inputNumber
					if( inputNumber == deposit.getId()){
						seq = depositMoneyService.createSequence();
					} else if( inputNumber == fetch.getId() ){
						seq = fetchMoneyService.createSequence();
					} else {
						System.out.println(" the erro number ,try agin ! ");
						continue;
					}
					System.out.println("please save your sequence: "+seq.getSeqVal());
				}else{
					isRun = false;
				}
			} catch( Exception e ){
				System.out.println(" there is some erro on this server,try again ! ");
				continue;
			}
		}
		
		
		System.out.println(" the server have exit-out... ");
	}
	
}

package com.cmboa.control.impl;

import com.cmboa.vo.Sequence;
import com.cmboa.window.Window;
import com.cmboa.window.impl.BankWindow;


public class SelectSequenceServerControl extends AbstractControl {

	public void run( Window window){
		isRun = true;
		Sequence seq = null;
		int inputNumber = 0;
		while( isRun ){
			try {
				// get the key that the user have inputed
				inputNumber = scan.nextInt();
				if( inputNumber != -1 ){
					// given the service by the inputNumber
					if( inputNumber == deposit.getId()){
						seq = depositMoneyService.selectSequence();
					} else if( inputNumber == fetch.getId() ){
						seq = fetchMoneyService.selectSequence();
					} else {
						System.out.println(" the erro number ,try agin ! ");
						continue;
					}
					
					if( seq == null ){
						System.out.println(" there is no sequence-obj,please switch business-type ");
						continue;
					}
					
					System.out.println("the customer NO"+seq.getSeqVal()+" go to the windwo No"+((BankWindow)window).id);
				}else{
					isRun = false;
				}
			} catch( Exception e ){
				System.out.println(" there is some erro on this server,try again ! ");
				continue;
			}
		}
		
		
		System.out.println(" the server have exit-out... ");
	}

	
}

/*******************************业务模块,服务层***************************************/
接口:
package com.cmboa.service;

import com.cmboa.vo.Sequence;

public interface Service {

		public Sequence createSequence();
		public Sequence selectSequence();
}
实现类:
package com.cmboa.service.impl;

import com.cmboa.dao.BaseDao;
import com.cmboa.dao.impl.DepositMoneyDao;
import com.cmboa.service.Service;
import com.cmboa.vo.DepositSeqVO;
import com.cmboa.vo.Sequence;

public class DepositMoneyService implements Service {

	BaseDao depositMoneyDao = new DepositMoneyDao();
	
	@Override
	public Sequence createSequence() {
		Sequence depositSeq = null;
		int currentSeqVal = depositMoneyDao.getCurrentSeqVal();
	    try {
	    	// get the next value in the sort,and create a DepositSeqVO object
	    	int nextVal = currentSeqVal + 1;
	    	depositMoneyDao.setCurrentSeqVal(nextVal);
	    	depositSeq = new DepositSeqVO(nextVal);
	    	depositMoneyDao.put(depositSeq);
	    } catch (Exception e){
	    	// when there is some exception ,rollback the opreations
	    	// then throw a RuntimeException with parservice
	    	depositMoneyDao.setCurrentSeqVal(currentSeqVal);
	    	throw new RuntimeException("there is some erro...",e);
	    }
		return depositSeq;
	}

	@Override
	public Sequence selectSequence() {
		
		return (Sequence)depositMoneyDao.get();
	}

}
package com.cmboa.service.impl;

import com.cmboa.dao.BaseDao;
import com.cmboa.dao.impl.FetchMoneyDao;
import com.cmboa.service.Service;
import com.cmboa.vo.DepositSeqVO;
import com.cmboa.vo.Sequence;

public class FetchMoneyService implements Service {

	BaseDao fetchMoneyDao = new FetchMoneyDao();
	
	@Override
	public Sequence createSequence() {
		Sequence fetchSeq = null;
		int currentSeqVal = fetchMoneyDao.getCurrentSeqVal();
	    try {
	    	// get the next value in the sort,and create a DepositSeqVO object
	    	int nextVal = currentSeqVal + 1;
	    	fetchMoneyDao.setCurrentSeqVal(nextVal);
	    	fetchSeq = new DepositSeqVO(nextVal);
	    	fetchMoneyDao.put(fetchSeq);
	    } catch (Exception e){
	    	// when there is some exception ,rollback the opreations
	    	// then throw a RuntimeException with the parent exception in order to tell the controller
	    	fetchMoneyDao.setCurrentSeqVal(currentSeqVal);
	    	throw new RuntimeException("there is some erro...",e);
	    }
		return fetchSeq;
	}

	@Override
	public Sequence selectSequence() {
		
		return (Sequence)fetchMoneyDao.get();
	}

}

/***********************业务模块,数据访问层,数据结构为队列**********************/
接口:
package com.cmboa.dao;

public interface BaseDao<T> {
	
	public int getCurrentSeqVal();
	public void setCurrentSeqVal( int seqval);
	public void put(T element);
	public  T get();
	
}
实现类:
package com.cmboa.dao.impl;


import com.cmboa.dao.BaseDao;
import com.cmboa.queue.QueueInterface;
import com.cmboa.queue.impl.DepositQueue;
import com.cmboa.vo.DepositSeqVO;

public class DepositMoneyDao<T> implements BaseDao<T> {

	
	private QueueInterface<T> depositQueue = new DepositQueue<T>();
	
	@Override
	public int getCurrentSeqVal() {
		return DepositSeqVO.getCurrentSeq();
	}

	@Override
	public void setCurrentSeqVal(int seqval) {
		DepositSeqVO.setCurrentSeq(seqval);
	}

	@Override
	public void put(T element) {
		depositQueue.put(element);
	}

	@Override
	public T get() {
		return depositQueue.get();
	}

}

package com.cmboa.dao.impl;

import com.cmboa.dao.BaseDao;
import com.cmboa.queue.QueueInterface;
import com.cmboa.queue.impl.FetchQueue;
import com.cmboa.vo.FetchSeqVO;

public class FetchMoneyDao<T> implements BaseDao<T> {

	private QueueInterface<T> fetchQueue = new FetchQueue<T>();
	
	@Override
	public int getCurrentSeqVal() {
		return FetchSeqVO.getCurrentSeq();
	}

	@Override
	public void setCurrentSeqVal(int seqval) {
		FetchSeqVO.setCurrentSeq(seqval);
	}

	@Override
	public void put(T element) {
		fetchQueue.put(element);
		
	}

	@Override
	public T get() {
		return fetchQueue.get();
	}
	
	

}

/************************业务模块,视图展现层,只负责接受数据展现********************************/
接口:
package com.cmboa.view;

import java.util.List;

import com.cmboa.domain.BusinessObject;

public interface ViewTemplate {
	/** to display the data that you have put in**/
	public void display( List<BusinessObject> businessList);
}

实现类:
package com.cmboa.view.imp;

import java.util.List;

import com.cmboa.domain.BusinessObject;
import com.cmboa.view.ViewTemplate;

/**
 * the default implement of the ViewTemplate
 * @author qiaoyupeng
 *
 */
public class DefaultViewTemplate implements ViewTemplate {

	@Override
	public void display(List<BusinessObject> businessList) {
		
		StringBuilder sb = new StringBuilder();
		sb.append("=============please select your business===============\n");
		for(BusinessObject obj : businessList)
			sb.append("\t"+obj.getId()+"  "+obj.getName()+"\n");
		sb.append("input the business id here : ");
		
		System.out.print(sb.toString());

	}

}

/*****************************领域类*************************************/
package com.cmboa.domain;

/**
 * the parent object of the all business-object
 * @author qiaoyupeng
 *
 */
public  class BusinessObject {
	
	protected Integer id;
	protected String name;
	
	public Integer getId() {
		return id;
	}


	public void setId(Integer id) {
		this.id = id;
	}


	public String getName() {
		return name;
	}


	public void setName(String name) {
		this.name = name;
	}
	
	
	
	
	
}

package com.cmboa.domain;
/**
 * The deposit-money object 
 * extends from BusinessObject
 * @author qiaoyupeng
 *
 */
public class DepositMoneyBusiness extends BusinessObject {
	
	public DepositMoneyBusiness(){
		super();
	}
	
	public DepositMoneyBusiness( Integer id ,String name ){
		this.id = id;
		this.name = name;
	}
	
}

package com.cmboa.domain;

/**
 * The fetch-money object 
 * extends from BusinessObject
 * @author qiaoyupeng
 *
 */
public class FetchMoneyBussiness extends BusinessObject {

	public FetchMoneyBussiness(){
		super();
	}
	
	public FetchMoneyBussiness( Integer id ,String name ){
		this.id = id;
		this.name = name;
	}
}

/*******************************队列类**********************************/
接口:
package com.cmboa.queue;

public interface QueueInterface<T> {

	/**put one element into the queue**/
	public void put( T element );
	
	/**get one element and remove it from the queue**/
	public T get();
	
}
实现类:
package com.cmboa.queue.impl;

import java.util.PriorityQueue;

import com.cmboa.queue.QueueInterface;

public abstract class AbstractQueue<T> implements QueueInterface<T> {

	private PriorityQueue<T> queue = new PriorityQueue<T>();
	
	@Override
	public void put(T element) {
		queue.add(element);
	}

	@Override
	public T get() {
		return queue.poll();
	}
	
	

}

package com.cmboa.queue.impl;

public class DepositQueue<T> extends AbstractQueue<T> {

}

package com.cmboa.queue.impl;

public class FetchQueue<T> extends AbstractQueue<T> {

}

/********************************vo类,用来封装数据*********************************/
package com.cmboa.vo;

public class DepositSeqVO extends Sequence {
	
	private static int currentSeq;
	
	public DepositSeqVO(){
		super();
	}
	
	public DepositSeqVO( int seqVal ){
		this.id = seqVal;
	}
	
	
	public static int getCurrentSeq(){
		return currentSeq;
	}
	
	public static void setCurrentSeq( int seq ){
		currentSeq = seq;
	}

}

package com.cmboa.vo;

public class FetchSeqVO extends Sequence {
	

	private static int currentSeq;
	
	public FetchSeqVO(){
		super();
	}
	
	public FetchSeqVO( int seqVal ){
		this.id = seqVal;
	}
	
	public static int getCurrentSeq(){
		return currentSeq;
	}
	
	public static void setCurrentSeq( int seq ){
		currentSeq = seq;
	}
	

}

package com.cmboa.vo;

public class Sequence {
	
	protected int id;
	
	public int getSeqVal(){
		return id;
	}
	
}






  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值