`
thinkingmt
  • 浏览: 24635 次
  • 性别: Icon_minigender_1
  • 来自: 桂林
社区版块
存档分类
最新评论

An design pattern of queue in bank

阅读更多

这个学期的Course Work 选择了“银行排队模拟系统”这个题目, 用这学期新学的‘动词名词分析法’一想,感觉挺简单的。因为唯一一个核心的类---windows,在里边封装好处理客户的算法;再加上一个customer类,用ArrayList将其封装,按照固定顺序,传递给windows进行处理,整个程序就完成了;还有涵盖最大的类---bank,对windows类和ArrayList<Customer>进行封装。

 

最初的设计是这样的:用bank类监控windows类,每当windows空闲下来时候,分配给其任务(这样的话,windows需要一个isIdle的属性,来记录其空闲状态,每次isIdle发生改变,触发bank类的update()方法,进行分配任务,也就是将ArrayList<Customer>的最新一个元素传递给windows)。这样的设计模式,通过Observer&Observable的配合很好地模拟了这个系统,也很符合实际。

 

简明的代码示例如下:

 

public class windows extends Obervable
{
private isIdle;

public windows
{
isIdle = true;// default is open !
}

public void handleCustomer(Customer cus)
{
setIdle();//when handle a customer, the attribute 'isIdle' change from 'true' to 'false'
// code to handle a customer
setIdle();//when handle finished, the attribute 'isIdle' change from 'false' to 'true'
}

public void setIdle
{
if(isIdle == true)
{
isIdle = false;
setChanged();
notifyObservers();
}
if(isIdle == false)
{
isIdle = true;
setChanged();
notifyObservers();
}

}
}

 

 

 接下来,简示bank类的代码:

 

public class band implements Observer
{
private windows[] win = new windows[n];

private ArrayList[Customer] queue = new ArrayList<Customer>();

public bank()
{
//some private method to initilize some parameter,like 'win' and 'queue'

private initWin();

private initQueue();

// the above private method is not very necessary to show,cause it's not attribute to illustrate the design pattern in this program, so do not show in this class.

}

public void update(Observable obs, Object arg)
{
//Because bank is an observer of windows, so in this method, 'obs' is a object of windows, arg is null, because the method notifyObservers() contains no parameter.

obs.handleCustomer(queue.offer());// assign the oldest customer in arraylist(cause the oldest means stand in the front of queue.)
}
}

 

   上面俩个类的代码,只能表示我本人对这个程序设计模式的思路,真正能运行的代码,在这里并不给出,因为真正做的时候,需要考虑到许多其他问题(比如,每一个窗口都需用一个独立的线程(thread),但由于我对线程的了解也并不多,所以在这里略去不说了,相信对线程了解多的大虾,可以轻松为此程序;此外,设计线程对于arraylist的操作,必须要同步synchronized,否则整个程序杂乱无章,根本达不到银行排队的效果,可能会出现多个窗口同时处理一个顾客的现实生活不可能发生的状况)。所以上述代码,仅仅是我的这个程序的design pattern(用到了Observable & Observer),和Logical path。

 

供大家参考而已,希望大虾可以指点,赐教!

 

 

 

 

 

 

分享到:
评论

相关推荐

    An example of C_queue

    THis is an example source code for the queue implemented by systemc.

    aws cloud design pattern

    《AWS Cloud Design Pattern》是关于亚马逊网络服务(AWS)云计算设计模式的重要参考资料,它深入探讨了如何有效地构建、部署和管理在AWS云平台上的应用程序。该压缩包包含了一本名为"cloud design 亚马逊.pdf"的...

    The.Little.Mongo.DB.Schema.Design.Book151739402

    We cover a lot of different aspects of Schema Design in this book. These include. Schema Basics including one to one, one to many and many to many relationships Embedding versus linking Bucketing ...

    Object-Oriented Analysis and Design 第六章

    - Decorator pattern adds behavior or responsibilities to an object dynamically without affecting the behavior of other objects in the same class. - Facade pattern provides a simplified interface to a ...

    C语言头文件 QUEUE.H

    C语言头文件 QUEUE.HC语言头文件 QUEUE.HC语言头文件 QUEUE.HC语言头文件 QUEUE.HC语言头文件 QUEUE.HC语言头文件 QUEUE.HC语言头文件 QUEUE.HC语言头文件 QUEUE.HC语言头文件 QUEUE.HC语言头文件 QUEUE.HC语言...

    解决Can't locate ThreadQueue.pm

    描述中的"Can't locate ThreadQueue.pm"是Perl运行时的一个典型错误信息,表示Perl解释器在@INC路径下找不到ThreadQueue模块的源码文件。@INC包含了Perl会搜索模块的目录列表,通常是Perl的安装目录,以及可能的...

    new work queue in linux 2.3.36

    ### Linux 2.3.36 新Work Queue机制解析 #### 概述 在Linux内核中,**工作队列(Work Queue)**是一种用于延迟执行任务的重要机制。与传统BH(Bottom Half)或者Tasklets相比,Work Queue的一个显著优势在于它能够...

    Cloud Design Patterns

    This guide demonstrates design patterns that can help you to solve the problems you might encounter in many different areas of cloud application development. Each pattern discusses design ...

    BANK.zip_bank queue_模拟仿真_银行_银行排队_队列

    "BANK.zip_bank queue_模拟仿真_银行_银行排队_队列"这个压缩包文件显然包含了一个用于模拟银行排队系统的程序或模型,名为"ex4_BANK"。通过这种模拟,我们可以深入理解银行排队系统的运作机制,优化服务效率,以及...

    Recursive Formula for the Moments of Queue Length in the M/M/1 Queue

    This letter presents the recursive formulas of ... Our method provides an alternative approach to derive the moments of queue length, instead of taking the derivatives of the moment generating function.

    Fluent Animation – An incredible animation queue system v0.8

    - Powerful animation queue system - Move, rotate, scale almost anything - Execute animations in parallel - Comes with 31 easing effects - Animating objects on a set of way points - Animate custom ...

    C# MessageQueue示例

    MessageQueue,又称消息队列,是C#中处理异步通信和解耦组件的重要技术。它允许应用程序之间通过消息传递数据,而无需彼此直接交互。下面将详细介绍C#中的MessageQueue以及如何使用它来发送和接收消息。 1. **...

    function definitions for the Array implementation of a Queue

    queue.cpp -- function definitions for the Array implementation of a Queue

    3D.Engine.Design.for.Virtual.Globes.1568817118

    Title: 3D Engine Design for Virtual Globes Author: Kevin Ring, Patrick Cozzi Length: 520 pages Edition: 1 Language: English Publisher: A K Peters/CRC Press Publication Date: 2011-06-24 ISBN-10: ...

    STL中priority_queue

    STL 中的 priority_queue priority_queue 是 STL 中的一种容器,可以实现优先级队列的功能。下面,我们将详细介绍 priority_queue 的使用方法和实现原理。 priority_queue 的基本概念 priority_queue 是一种特殊...

    Queue与Topic的比较

    Queue 与 Topic 的比较 Queue 和 Topic 是 JMS(Java Message Service)中两种基本的消息模式,分别对应 Point-to-Point 和 Publish/Subscribe 模式。 Queue 模式 在 Queue 模式中,一条消息仅能被一个消费者...

    C++ Queue(带上限的)

    在C++编程语言中,`Queue`是一种常用的数据结构,它遵循“先进先出”(First In First Out, FIFO)的原则。通常,C++标准库提供了`&lt;queue&gt;`头文件来实现基本的队列操作,但这个标准队列并没有设置上限。在某些特定...

    Queue-Queue-Queue

    Queue-Queue-Queue

Global site tag (gtag.js) - Google Analytics