/************************招商银行窗口类,包括接待窗口和业务办理窗口************************************/
接口:
/**
* 招商银行窗口统一接口规范,规定每个窗口都提供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;
}
}
模拟招商银行叫号业务办理流程
最新推荐文章于 2022-01-10 17:11:32 发布