玩转Java设计模式之观察者模式
发布时间:2023-04-26 13:35:06 所属栏目:教程 来源:
导读://抽象主题
@Data
public abstract class Subject {
//主题订阅者们
private List<Observer> observerList = Lists.newArrayList();
//订阅
public void register(Observer observer) {
@Data
public abstract class Subject {
//主题订阅者们
private List<Observer> observerList = Lists.newArrayList();
//订阅
public void register(Observer observer) {
|
//抽象主题 @Data public abstract class Subject { //主题订阅者们 private List<Observer> observerList = Lists.newArrayList(); //订阅 public void register(Observer observer) { observerList.add(observer); } //取消订阅 public void remove(Observer observer) { observerList.remove(observer); } //发布东西 public abstract void publish(String msg); } //抽象观察者 @Slf4j @Data @AllArgsConstructor public abstract class Observer { //观察者名称 private String name; //更新状态,由主题调度 public void update(Object subject, Object args) { log.info("{}获取到变更通知:{}", name, args); } } //博客主题 @Slf4j public class Blog extends Subject { @Override public void publish(String msg) { log.info("发布msg:{}", msg); //通知订阅者 getobserverList().forEach(observer -> observer.update(this, msg)); } } //普通用户观察者 @Slf4j public class normalObserver extends Observer { public normalObserver(String name) { super(name); } @Override public void update(Object subject, Object args) { super.update(subject, args); log.info("{}获取到变更通知:普通用户可以不缓存", getName()); } } //vip用户观察者 @Slf4j public class VipObserver extends Observer { public VipObserver(String name) { super(name); } @Override public void update(Object subject, Object args) { super.update(subject, args); log.info("{}获取到变更通知:vip可以缓存", getName()); } } @Slf4j public class Application { public static void main(String[] args) { Blog blog = new Blog(); VipObserver wang = new VipObserver("老王99"); VipObserver lee = new VipObserver("老李"); normalObserver four = new normalObserver("小四"); normalObserver twoegg = new normalObserver("二蛋"); log.info("---------------------begin--------------------"); // 用户订阅博客,普通和vip用户 new Thread(() -> { blog.register(wang); sleep(2); blog.register(lee); sleep(2); blog.register(four); }).start(); // 博客线程每隔2秒发布一次文章, 总共发布4次 new Thread(() -> { IntStream.rangeClosed(1, 4).forEach(i -> { blog.publish(String.format("新把戏第%s次", i)); sleep(2); }); }).start(); // 有用户退出订阅博客,也有二蛋加入订阅 new Thread(() -> { sleep(3); blog.remove(lee); sleep(2); blog.register(twoegg); }).start(); } private static void sleep(int seconds) { try { TimeUnit.SECONDS.sleep(seconds); } catch (InterruptedException e) { log.error("error : ", e); } } } 折腾Java设计模式之观察者模式 jdk内置的Obverser和Observable @Slf4j public class ObserverApplication { public static void main(String[] args) { log.info("Enter Text: "); EventSource eventSource = new EventSource(); eventSource.addobserver((obj, arg) -> { log.info("Received response: {}", arg); }); eventSource.addobserver((obj, arg) -> { log.info("Received response2: {},,{}", arg, obj ); }); new Thread(eventSource).start(); } } class EventSource extends Observable implements Runnable { public void run() { while (true) { String response = new Scanner(system.in).next(); setChanged(); notifyObservers(response); } } } (编辑:汽车网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
推荐文章
站长推荐
