Mik*_* L. 3 java design-patterns shutdown
我有一个用java编写的系统,我有多个不同的对象,每个对象都有不同的资源在使用.有些与activeMQ队列有连接,有些有网络连接,有些有开放文件.有些还包含正在运行的线程
当在此系统中的任何位置发生致命错误时,我需要将其关闭并正确关闭所有资源并停止所有正在运行的线程.
当导致错误的对象需要启动关闭过程时,我的问题就出现了.此对象不知道具有打开文件的其他对象等.所以它基本上可以释放所有资源,就是这样.
我正在寻找一种干净的方法来实现这一点,而不会弄乱并在系统周围传递多个对象引用.
任何见解都表示赞赏.谢谢.
创建一个中心Lifecycle对象,应用程序中的所有其他对象都可以引用该对象,并且该对象又引用所有这些其他对象.另外,这些对象中的每一个都应该实现一个通用接口,例如
public interface ShutdownListener {
void onShutdown();
}
Run Code Online (Sandbox Code Playgroud)
当其中一个对象需要开始有序关闭时,它可以调用lifecycle.shutdown()哪个可以依次调用object.onShutdown()在其上注册的所有对象,以便为这些对象提供关闭其资源的机会.
这基本上是观察者模式.
如果你使用一个依赖注入容器,比如Spring,这种类型的东西是内置的 - 你的bean可以扩展某个接口,以便在容器关闭时得到通知.