银川公司网站建设,wordpress宝宝网商城免费模板下载,seo案例网站建设哪家好,数字营销经理岗位职责上一篇我们学习了 观察者模式。
观察者和被观察者接口都是我们自己定义的#xff0c;整个设计模式我们从无到有都是自己设计的#xff0c;其实#xff0c;java已经内置了这个设计模式#xff0c;我们只需要定义实现类即可。
下面我们不多说明#xff0c;直接示例代码整个设计模式我们从无到有都是自己设计的其实java已经内置了这个设计模式我们只需要定义实现类即可。
下面我们不多说明直接示例代码例子依然同 观察者模式篇章建议先去看看。
/*** 被观察者具体实现, 实现jdk自带的类** author jiangkd* date 2023/7/28 10:32:03*/
Component
public class WeChatMessage extends Observable {private String message;/*** 模拟被观察者的主题更新, 通知所有观察者** param message 主题更新*/public void updateMessage(String message) {this.message message;// 通知所有观察者this.setChanged();this.notifyObservers(message);}}两个观察者
/*** 具体的观察者1** author jiangkd* date 2023/7/28 10:07:34*/
Slf4j
Component
public class User1 implements Observer {/*** 观察者接收消息, 知道被观察者发生了变化, 自己进行相应的处理, 这里只是测试打印日志而已** param o 主题, 被观察者主题类型* param arg 接受到的消息*/Overridepublic void update(Observable o, Object arg) {if (o instanceof WeChatMessage) {log.info(我是具体的观察者之一:{}, this.getClass().getSimpleName());log.info(被观察者发生变化, 接收消息:{}, String.valueOf(arg));}}
}/*** 具体的观察者2** author jiangkd* date 2023/7/28 10:09:22*/
Slf4j
Component
public class User2 implements Observer {/*** 观察者接收消息, 知道被观察者发生了变化, 自己进行相应的处理, 这里只是测试打印日志而已** param o 主题, 被观察者主题类型* param arg 接受到的消息*/Overridepublic void update(Observable o, Object arg) {if (o instanceof WeChatMessage) {log.info(我是具体的观察者之一:{}, this.getClass().getSimpleName());log.info(被观察者发生变化, 接收消息:{}, String.valueOf(arg));}}}测试
/*** author jiangkd* date 2023/7/28 10:37:36*/
SpringBootTest(classes DemoApplication.class)
RunWith(SpringRunner.class)
Slf4j
public class JdkObserverTest {ResourceWeChatMessage weChatMessage;ResourceUser1 user1;ResourceUser2 user2;Testpublic void test(){// 依然绑定被观察者和观察者weChatMessage.addObserver(user1);weChatMessage.addObserver(user2);weChatMessage.updateMessage(测试一下1!!);}}执行结果记录日志 2023-07-28 10:47:30.713 INFO 23796 — [ main] d.b.e.design_patterns.gczms.jdk.User2 : 我是具体的观察者之一:User2 2023-07-28 10:47:30.714 INFO 23796 — [ main] d.b.e.design_patterns.gczms.jdk.User2 : 被观察者发生变化, 接收消息:测试一下1!! 2023-07-28 10:47:30.714 INFO 23796 — [ main] d.b.e.design_patterns.gczms.jdk.User1 : 我是具体的观察者之一:User1 2023-07-28 10:47:30.714 INFO 23796 — [ main] d.b.e.design_patterns.gczms.jdk.User1 : 被观察者发生变化, 接收消息:测试一下1!! 然后测试注销其中一个观察者User1
SpringBootTest(classes DemoApplication.class)
RunWith(SpringRunner.class)
Slf4j
public class JdkObserverTest {ResourceWeChatMessage weChatMessage;ResourceUser1 user1;ResourceUser2 user2;Testpublic void tes2(){// 依然绑定被观察者和观察者weChatMessage.addObserver(user1);weChatMessage.addObserver(user2);weChatMessage.updateMessage(在干什么);log.info();weChatMessage.deleteObserver(user1);weChatMessage.updateMessage(你过来一下);}}执行结果记录日志: 2023-07-28 10:48:38.946 INFO 17928 — [ main] d.b.e.design_patterns.gczms.jdk.User2 : 我是具体的观察者之一:User2 2023-07-28 10:48:38.947 INFO 17928 — [ main] d.b.e.design_patterns.gczms.jdk.User2 : 被观察者发生变化, 接收消息:在干什么 2023-07-28 10:48:38.948 INFO 17928 — [ main] d.b.e.design_patterns.gczms.jdk.User1 : 我是具体的观察者之一:User1 2023-07-28 10:48:38.948 INFO 17928 — [ main] d.b.e.design_patterns.gczms.jdk.User1 : 被观察者发生变化, 接收消息:在干什么 2023-07-28 10:48:38.948 INFO 17928 — [ main] d.b.e.d.gczms.JdkObserverTest : 2023-07-28 10:48:38.948 INFO 17928 — [ main] d.b.e.design_patterns.gczms.jdk.User2 : 我是具体的观察者之一:User2 2023-07-28 10:48:38.948 INFO 17928 — [ main] d.b.e.design_patterns.gczms.jdk.User2 : 被观察者发生变化, 接收消息:你过来一下