1 回调函数
接上篇小王睡觉之后,第二天起床上学,老王看到小王出门后,决定让老师通知自己小王的去向,于是设计了一个回调模式
1、给老师一个通话的接口:
interface Callback {
boolean onCall();
}
2、老王安排一个执行顺序:
abstract class Holder {
/** 小王出门 */
public abstract void run();
public final void run(Callback callback) {
assert callback != null;
run();
boolean b = callback.onCall();
if (b) {
System.out.println("老师看到了小王");
} else {
System.out.println("老王请注意,小王旷课打游戏去了");
}
}
}
3、小王在老王安排下的行动:
class ConcurrentHolder extends Holder{
@Override
public void run() {
System.out.println("小王出门上学了,老王再见");
}
}
4、然后再看回调结果(附主函数)
public static void main(String[] args) {
// 这里实现了接口中的onCall方法
Callback callback = () -> false;
ConcurrentHolder holder = new ConcurrentHolder();
holder.run(callback);
}
----------------------------------------------------------
小王出门上学了,老王再见
老王请注意,小王旷课打游戏去了
2 观察者模式
小王旷课打游戏去了,心里一直很不安,他又返回家中偷偷的观察了老王的状态
1、观察小王的人的行为抽象类
interface watcher {
void behavior();
}
2、小王的能力的抽象接口
interface watched {
void addWatcher();
void removeWatcher();
void notifyWatchers();
}
3、小王的观察者们的行为
class BigWang implements Watcher {
@Override
public void behavior() {
System.out.println("老王准备去网吧找小王");
}
}
class WangWife implements Watcher {
@Override
public void behavior() {
System.out.println("王妈准备去网吧找小王");
}
}
class Teacher implements Watcher {
@Override
public void behavior() {
System.out.println("老师准备叫家长");
}
}
4、小王具有的能力
class LittleWang implements Watched {
private List<Watcher> result = new ArrayList<>();
@Override
public void addWatcher(Watcher watcher) {
result.add(watcher);
}
@Override
public void removeWatcher(Watcher watcher) {
result.remove(watcher);
}
@Override
public void notifyWatchers() {
for (Watcher watcher: result) {
watcher.behavior();
}
}
}
5、主方法,及结果
public static void main(String[] args) {
LittleWang wang = new LittleWang();
wang.addWatcher(new BigWang());
wang.addWatcher(new WangWife());
wang.addWatcher(new Teacher());
wang.notifyWatchers();
}
--------------------------------------------
老王准备去网吧找小王
王妈准备去网吧找小王
老师准备叫家长