某日,终于开始开发MOS引擎了,说起这个名称还真是有点NB,光是名称而已。哈哈!
MOS(Mini Operation System),微型操作系统,简称MOS,此引擎相当于一个操作系统,说白一点其实也就是一个服务器框架,可以加载N个服务,开发人员只需要继承服务接口,就可以开发相对应的功能,就像window系统里面的服务那样!
框架开发好之后,以后就只需要不断开发服务就行了,框架依然正常运行!
既然是一个服务容器,那应该就是一个不断运行的东西,然后里面可以装一些东西,打个比喻就是像tomcat,我们可以讲war包直接扔进webapp目录下,它就能够运行这个项目。如果说MOS相对于Tomcat,那war包就相对于开发人员开发的服务。
Tomcat也有启动,关闭之类的,还有启动之后就会自动解压war包,没看过Tomcat的源码,但是估计也就是启动的时候有相关的事件通知,说到事件通知前段时间刚学了一招,观察者模式,呵呵...有兴趣的可以去看看我的博客,欢迎欢迎@
状态模式:当一个对象的内在状态改变时允许改变其行为,这个对象看起来是改变了其类。书本上的描述状态模式就这样的,不过我感觉就是晦涩难懂,定义都不明所以。我先提两个问题:
1,服务器启动的时候该干什么?
2,服务器停止的时候该干什么?
解答:
@1:服务器启动的时候就加载服务
@2:服务器停止的时候通知服务停止,最后才关闭服务器
再问:服务器启动的时候谁知道呢?告诉谁呢?
@3:启动的时候应该有事件通知,通知服务器启动,可以干点什么了(加载服务)
于是:那应该得用个什么变量来保存保存服务器的状态,让别人(服务)知道服务器已经启动了,可以加载。
为什么要这样呢?
打个比喻,在学校的时候,你是喜欢饭堂阿姨煮好饭之后去宿舍叫一下你来吃饭,还是你喜欢隔一段时间就去饭堂看看饭煮好了没?
状态模式的口号就是:见风使舵
好了,于是就来了一个类,
1,服务器状态
package cn.std.mos.core.state;
abstract public class State {
public static final String STARTING = "STARTING";
public static final String STOPPING = "STOPPING";
public static final String PAUSING = "PAUSING";
public static final String RUNNING = "RUNNING";
public static final String PAUSE = "PAUSE";
public static final String STOP = "STOP";
/** 服务器状态 */
private String status;
/** 状态对应描述 */
private String desc;
public String getStatus() {
return status;
}
public void setStatus(String status) {
this.status = status;
}
public String getDesc() {
return desc;
}
public void setDesc(String desc) {
this.desc = desc;
}
}
2,各种状态,都继承State这个状态类,例如StartServerState,启动状态
package cn.std.mos.core.state;
public class StartServerState extends State {
static class SingletonHolder{
static StartServerState instance = new StartServerState();
}
public static synchronized StartServerState getInstance(){
return SingletonHolder.instance;
}
private StartServerState() {
// TODO Auto-generated constructor stub
this.setStatus(STARTING);
this.setDesc("服务器正在启动");
//此处启动开机启动加载的服务
}
}
3,运行状态
package cn.std.mos.core.state;
public class RunServerState extends State {
static class SingletonHolder{
static RunServerState instance = new RunServerState();
}
public static RunServerState getInstance(){
return SingletonHolder.instance;
}
private RunServerState() {
// TODO Auto-generated constructor stub
this.setStatus(RUNNING);
this.setDesc("服务器正在运行");
}
}
4,停止状态
package cn.std.mos.core.state;
public class StopServiceState extends State {
static class SingletonHolder{
static StopServiceState instance = new StopServiceState();
}
public static StopServiceState getInstance(){
return SingletonHolder.instance;
}
private StopServiceState() {
// TODO Auto-generated constructor stub
this.setStatus(STOP);
this.setDesc("服务器已停止");
}
}
还有其他状态,我不写了!
这里说明,状态类中使用内部静态类,实际就是单例模式,共享状态资源!
那现在看看怎么使用:
package cn.std.mos.core.state;
public class client {
private State state;
public State getState() {
return state;
}
public void setState(State state) {
this.state = state;
System.out.println("服务器状态:"+getState().getStatus());
}
public static void main(String[] args) {
client c = new client();
c.setState(StartServerState.getInstance());
}
}
其实状态模式也就是将很复杂的状态切换的逻辑分开来,放到别的类去定义。嗯,好像没怎么描述明白,我回去再看看书!哈哈,另外附上我的MOS引擎,才刚开始写,反正服务框架是有了,继承AbstractService接口,可以进行开发自己的服务,大家提供点意见也行,加入跟我一起开发也行,哈哈,仅限菜鸟,大牛级人物就别来打击我了!哈哈!
还有附上运行图片: