观察者模式

1 /*
2 * 观察者
3 * 关注公众号的人
4 * */
5 public interface Observer {
6     //处理公众号发来的信息
7     void handleNotify(Object message);
8 }
1 //观察者
2 public class User2Observer implements Observer {
3     @Override
4     public void handleNotify(Object message) {
5         System.out.println("小红也接收到:"+message+"公众号推送来的提示");
6     }
7 }
1 //观察者2
2 public class UserObserver implements Observer {
3     @Override
4     public void handleNotify(Object message) {
5         System.out.println("小明接收到:"+message+"公众号推送来的提示");
6     }
7 }

接下来就写被观察的对象

1 //被观察者 -->公众号
2 public interface Subect {
3     //推送文章 里面的括号(需要添加观察者也就是关注公众号的人)
4     void pushArticle(Observer observer);
5     //删除文章 里面的括号(需要添加观察者也就是关注公众号的人)
6     void deleteArticle(Observer observer);
7     //通知用户
8     void notityUser(Object msg);
9 }
 1 /*
 2 被观察者
 3 */
 4 
 5 public class AccountsSubect implements Subect {
 6     private List<Observer> ob;
 7     //创建一个无参  使得被观察者一创建,观察者也能一起被创建
 8     public AccountsSubect(){
 9         ob = new ArrayList<>();
10     }
11 
12 
13     @Override
14     public void pushArticle(Observer observer) {
15         ob.add(observer);
16     }
17 
18     @Override
19     public void deleteArticle(Observer observer) {
20         //判斷是否有這個人
21         if (ob.contains(observer)) {
22             ob.remove(observer);
23         }
24     }
25 //    @Override
26     public void notityUser(Object msg) {
27         //通知每一个观察者
28         for (Observer observer : ob) {
29             observer.handleNotify(msg);
30         }
31     }
32 }
 1 public class Mytest {
 2     public static void main(String[] args) {
 3         //创建多个观察者
 4         UserObserver o1 = new UserObserver();
 5         User2Observer o2 = new User2Observer();
 6 
 7         //创建被观察者
 8         Subect s = new AccountsSubect();
 9         
10         s.pushArticle(o1);
11         s.pushArticle(o2);
12         
13         //删除推送
14         s.deleteArticle(o1);
15         //通知
16         s.notityUser("{小米官方}");
17 
18     }
19 }

原文地址:https://www.cnblogs.com/rzkwz/p/12662759.html