观察者设计模式
当事件源满足特定条件需要触发事件通知第三方时可以使用这种设计模式。
线程状态下的观察者设计模式
- 设计触发事件条件并屏蔽线程的方法,需要就添加对应方法
/**
* 任务线程的触发条件
* 显示当前任务的生命状态 是触发事件的条件
*/
public interface Observable {
// 任务生命周期的枚举状态
enum Cycle{
STARTED,RUNNING,DONE,ERROR
}
// 获取当前任务的生命状态
Cycle getCycle();
// 定义任务线程启动的方法 主要屏蔽Thread的其他方法
void start();
// 定义任务线程打断方法 Thread其他方法类似 需要自己添加
void interrupt();
}
- 设计任务线程逻辑执行单元
/**
* 和Runnable的接口类似 用来承载任务的逻辑执行单元
* 但是 有返回值 和Callable类似
*/
@FunctionalInterface
public interface Task<T> {
// 任务执行单元 有返回值
T call();
}
- 设计触发事件接口和默认空实现
/**
* 被触发的事件
* 事件源调用该接口方法,执行其实现类的方法
*/
public interface TaskLifecycle<T> {
// 任务启动时执行 线程准备方法
void onStart(Thread thread);
// 任务运行时执行 线程执行方法
void onRunning(Thread thread);
// 任务完成时执行 线程关闭方法 并有返回值
void onFinish(Thread thread,T result);
// 任务执行报错时执行
void onError(Thread thread,Exception exception);
// 空实现 为了保持对Thread类的使用习惯
class EmptyLifecycle<T> implements TaskLifecycle<T>{
@Override
public void onStart(Thread thread) {
System.out.println(currentThread().getName()+"----------事件1 触发开始事件-------------");
}
@Override
public void onRunning(Thread thread) {
System.out.println(currentThread().getName()+"----------事件2 触发执行中事件-------------