本文内容分为部分:
1、为啥不用rx
2、LifeNextBus 使用
3、LifeNextBus 代码
4、使用注意事项
正文:
1、为啥不用rx:
RX使用需要引用jar,为实现一个功能,引入太多代码。并且很难根据需求改变源码,不够灵活。
自定义实现响应事件处理100行代码即可,非常方便简单。传递数据指定类型反而不够灵活。
2、LifeNextBus 使用:
LifeNextBus.create(new LifeNextBus.Emitter() {
@Override
public void doEmitter(LifeNextBus.IEmitter emitter) {
System.out.println("1");
emitter.send(0);
}
}).middle(new LifeNextBus.LifeNextBusMiddle() {
@Override
public void donext(LifeNextBus.LifeNextBusObser nextObser, Object data) {
int a = (int) data;
if (a == 1) {
System.out.println("2");
nextObser.doNext(2);
} else {
System.out.println("3");
}
}
}).bind(new LifeNextBus.LifeNextBusObser() {
@Override
public void doNext(Object data) {
System.out.println("3"+data);
}
});
3、LifeNextBus源码100行:
public abstract class LifeNextBus {
/**
* 初始化
*/
public static LifeNextBus create(LifeNextBus bus) {
return bus;
}
/**
* 创建发射器方式初始化
*/
public static LifeNextBus create(Emitter emitter) {
LifeNextBus startlifeNextBus = new LifeNextBus() {
@Override
public void bind(LifeNextBusObser nextBack) {
if (emitter == null) {
System.out.println("RuntimeException in thread [" + Thread.currentThread().getName() + "] [create] [emitter为空]");
return;
}
emitter.setLifeNextBusObser(nextBack);
emitter.doEmitter(emitter);
}
};
return create(startlifeNextBus);
}
/**
* 绑定观察者
*/
public abstract void bind(LifeNextBusObser nextObser);
/**
* 中间层转换处理
*/
public LifeNextBus middle(LifeNextBusMiddle middle) {
LifeNextBus nextBus = new LifeNextBus() {
@Override
public void bind(LifeNextBusObser nextObser) {
LifeNextBusObser upbusObser = new LifeNextBusObser() {
@Override
public void doNext(Object updata) {
if (middle != null && nextObser != null) {
middle.donext(nextObser, updata);
} else {
System.out.println("RuntimeException in thread [" + Thread.currentThread().getName() + "] [doNext] [中间转换器或者观察者为空]");
return;
}
}
};
LifeNextBus.this.bind(upbusObser);
}
};
return nextBus;
}
/**
* 观察者
*/
public interface LifeNextBusObser {
void doNext(Object data);
}
/**
* 转换器
*/
public interface LifeNextBusMiddle {
void donext(LifeNextBusObser nextObser, Object data);
}
/**
* 发射器
*/
public interface IEmitter {
void send(Object object);
}
/**
* 发射器 实现类
*/
abstract public static class Emitter implements IEmitter {
public LifeNextBusObser lifeNextBusObser;
@Override
public void send(Object object) {
if (lifeNextBusObser != null) {
lifeNextBusObser.doNext(object);
}
}
public abstract void doEmitter(IEmitter emitter);
public void setLifeNextBusObser(LifeNextBusObser lifeNextBusObser) {
this.lifeNextBusObser = lifeNextBusObser;
}
}
}
4、LifeNextBus使用注意事项:
* LifeNextBus.create.middle.middle...bind
* 1、在中间层 可异步转换数据,可定义多个中间层
* 2、传递Object数据,自身处理数据转换
* 3、调用者自行处理线程转换
* 4、异常自行处理