首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

Design Pattern: Guarded Suspension 形式

2012-10-08 
Design Pattern: Guarded Suspension 模式考虑这么一个伺服器,它可以处理来自多个客户端的服务请求(Reques

Design Pattern: Guarded Suspension 模式

考虑这么一个伺服器,它可以处理来自多个客户端的服务请求(Request),为了不丢失客户的请求,它要维持一个缓冲区,客户的请求会先储存至缓冲区中,而伺服器会从缓冲区中取出请求并执行,如果缓冲区中没有请求,则伺服器就等待,直到被通知有新的请求存入缓冲区中,伺服器再度进行请求的执行。

关于这个描述的一个简单 UML 顺序图如下所示:

首先要考虑到,缓冲区会同时被两个以上的执行绪进行存取,即伺服器的请求处理执行绪与客户端执行绪,所以必须对缓冲区进行防护。

再来是当缓冲区中没有请求时,伺服器必须等待直到被通知有新的请求。

Guarded Suspension模式关注的是执行的流程架构,以Java来实现这个架构的话如下所示:
RequestQueue.java
public class RequestQueue {    private java.util.LinkedList queue;    public RequestQueue() {        queue = new java.util.LinkedList();    }    public synchronized Request getRequest() {        while(queue.size() <= 0) {            try {                wait();            }            catch(InterruptedException e) {}        }        return (Request) queue.removeFirst();    }    public synchronized void putRequest(Request request) {        queue.addLast(request);        notifyAll();    }} 


一个例子是多人聊天伺服器,请求可能只是一个客户端送出的聊天讯息,聊天讯息会先存至缓冲区中,伺服器会不断的从缓冲区中取出聊天讯息并发给客户端,如果缓冲区中没有新讯息,则伺服器就进入等待,直到有一个客户端发出聊天讯息并存入缓冲区中,此时伺服器再度被通知,然后再度取出讯息并进行发送。

热点排行