1. C语言实现服务器软件时的常用编程模型
熟悉服务器软件开发的开发人员都知道使用Producer-Consumer模型加上线程池隔离消息的接收和消息的处理,但到消息的具体处理时一般是构建一个实例状态和消息类型的二维矩阵,矩阵的内容是函数指针。本文默认认为你熟悉State Design Pattern,主要介绍用State Design Pattern来替换这个方法。
2. State模式的应用
使用State设计模式可以将所有的消息的处理放到具体的State对象中,这样将实例状态这个维度分解为不同的消息对象,而将消息类型这个维度封装到具体的State对象中,就可以使用面向对象的思想来实现服务器软件。
3. State模式的增强
a. 一般在设计状态对象的时候,状态对象里面不放任何属性,完全把状态对象做成一个方法的集合。
b. 如果a成立的话,可以进一步把每个状态对象作为Singleton和Immutable来实现。
采用以上方法的好处是,整个系统中所有的session就可以共享这些状态对象,避免了需要不停的创建和销毁状态对象,极大的提升性能。
4. 关于Servlet Container实现的思考
a. 其实我们考虑HttpServlet的实现,其实我们自己在写HttpServlet的时候最好不要增加字段,否则就会出现同步的问题。
b. 虽然HttpServlet没有使用Singleton模式,但是一般的Servlet Container只会创建一个HttpServlet。
c. HttpServlet就是就是一个方法的集合,有doGet, doPost, doMethod...
d. XML其实就是就应和了State这个维度
综合以上思考,其实Servlet Container实现就是应用了State设计模式