免费制作logo的网站网站建设招标书范本
web/
2025/10/1 19:04:24/
文章来源:
免费制作logo的网站,网站建设招标书范本,装修队伍做网站,久久网招聘信息常用程序模式-LifeCycle模式
场景
当我们要监控一个组件的生命周期的时候#xff0c;比如#xff0c;启动时#xff0c;启动后#xff0c;关闭前#xff0c;关闭后
实现
LifeCycleModule
public interface LifeCycleModule {/*** 获取当前状态* return*/LifeCycle.St…常用程序模式-LifeCycle模式
场景
当我们要监控一个组件的生命周期的时候比如启动时启动后关闭前关闭后
实现
LifeCycleModule
public interface LifeCycleModule {/*** 获取当前状态* return*/LifeCycle.State getCurrentState();/*** add listener* param listener*/void addListener(LifeCycleListener listener);/*** 启动*/void start();/*** 停止*/void stop();/*** 关闭*/void close();
}AbstractLifeCycleModule:
public abstract class AbstractLifeCycleModule implements LifeCycleModule {private LifeCycle lifeCycle new LifeCycle();private ListLifeCycleListener listeners new ArrayList();Overridepublic LifeCycle.State getCurrentState() {return lifeCycle.getState();}Overridepublic void addListener(LifeCycleListener listener) {listeners.add(listener);}Overridepublic void start() {synchronized (lifeCycle){if (!lifeCycle.canChangeToStart()){return;}for (LifeCycleListener listener : listeners) {listener.beforeStart();}doStart();lifeCycle.changeToStarted();for (LifeCycleListener listener : listeners) {listener.afterStart();}}}protected abstract void doStart();Overridepublic void stop() {synchronized (lifeCycle){if (!lifeCycle.canChangeToStop()){return;}for (LifeCycleListener listener : listeners) {listener.beforeStop();}doStop();lifeCycle.changeToStop();for (LifeCycleListener listener : listeners) {listener.afterSop();}}}protected abstract void doStop();Overridepublic void close() {synchronized (lifeCycle){if (!lifeCycle.canChangeToClose()){return;}for (LifeCycleListener listener : listeners) {listener.beforeClose();}lifeCycle.changeToClosed();try {doClose();}catch (Exception e){throw new RuntimeException(e);}finally {for (LifeCycleListener listener : listeners) {listener.afterClose();}}}}protected abstract void doClose();
}LifeCycleListener
public interface LifeCycleListener {/*** 在开始之前*/void beforeStart();/*** 在开始之后*/void afterStart();/*** 在停止之前*/void beforeStop();/*** 在停止之后*/void afterSop();/*** 在关闭之前*/void beforeClose();/*** 在关闭之后*/void afterClose();
}LifeCycle 状态管理
public class LifeCycle {private volatile LifeCycle.State state State.INIT;public LifeCycle.State getState() {return state;}public boolean canChangeToStart() {State curState this.state;if (curState State.INIT || curState State.STOP) {return true;}if (curState State.START) {return false;}if (curState State.CLOSE) {throw new IllegalArgumentException(can not move close to start);}throw new IllegalArgumentException(illegal state);}public synchronized boolean changeToStarted() {State curState this.state;if (curState State.INIT || curState State.STOP) {state State.START;return true;}return false;}public boolean canChangeToClose() {State curState this.state;if (curState State.CLOSE) {return false;}return true;}public synchronized boolean changeToClosed() {State curState this.state;if (curState State.CLOSE) {return false;}state State.CLOSE;return true;}public boolean canChangeToStop() {State curState this.state;if (curState State.START) {return true;}return false;}public synchronized boolean changeToStop() {State curState this.state;if (curState State.START) {state State.STOP;return true;}return false;}enum State {INIT, START, STOP, CLOSE}public boolean initialized() {return this.state State.INIT;}public boolean started() {return this.state State.START;}public boolean stopped() {return this.state State.STOP;}public boolean closed() {return this.state State.CLOSE;}}测试
Slf4j
public class WebServer extends AbstractLifeCycleModule{public WebServer(){addListener(new WebServerListener());}Overrideprotected void doStart() {log.info({} doStart, Thread.currentThread().getName());}Overrideprotected void doStop() {log.info({} doStop, Thread.currentThread().getName());}Overrideprotected void doClose() {log.info({} doClose, Thread.currentThread().getName());}static class WebServerListener implements LifeCycleListener{Overridepublic void beforeClose() {log.info({} before close, Thread.currentThread().getName());}Overridepublic void afterClose() {log.info({} after close, Thread.currentThread().getName());}Overridepublic void beforeStart() {log.info({} before start, Thread.currentThread().getName());}Overridepublic void afterStart() {log.info({} after start, Thread.currentThread().getName());}Overridepublic void beforeStop() {log.info({} before stop, Thread.currentThread().getName());}Overridepublic void afterSop() {log.info({} after stop, Thread.currentThread().getName());}}public static void main(String[] args) throws InterruptedException {WebServer webServer new WebServer();webServer.start();TimeUnit.SECONDS.sleep(1);webServer.stop();TimeUnit.SECONDS.sleep(1);webServer.close();}
}结果:
INFO com.example.lifecycle.WebServer -- main before start
INFO com.example.lifecycle.WebServer -- main doStart
INFO com.example.lifecycle.WebServer -- main after start
INFO com.example.lifecycle.WebServer -- main before stop
INFO com.example.lifecycle.WebServer -- main doStop
INFO com.example.lifecycle.WebServer -- main after stop
INFO com.example.lifecycle.WebServer -- main before close
INFO com.example.lifecycle.WebServer -- main doClose
INFO com.example.lifecycle.WebServer -- main after close
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/85208.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!