设计模式——观察者模式
跟着小欢子一起学习设计模式,写出优雅的代码——妈妈再也不担心我的代码被吐槽了
一、两个人
观察者模式中有两个抽象的角色,观察者和被观察者。看清楚哦,是抽象的哟。实际他们有各种各样的身份。如学生是观察者,老师是被观察者。学生们观察老师,等待上课或者下课的消息。再如微信公众号和微信用户。微信用户是观察者,公众号是被观察者。微信用户观察公众号,等待公众号更新文章。
二、四个方法
四个方法分别是观察者的更新消息,以及被观察者的添加观察者,删除观察者以及推送消息
三、栗子
抽象的观察者
package Observer;
public interface Observer {
//接收更新的消息
public void update(String message);
}
抽象的被观察者
package Observer;
public interface Subject {
//增加订阅者
public void add(Observer observer);
//删除订阅者
public void del(Observer observer);
//通知订阅者
public void notify(String message);
}
观察者实例——学生
package Observer;
public class Student implements Observer {
private String name;
//初始化
Student(String name){
this.name=name;
}
接收更新的消息
@Override
public void update(String message) {
System.out.println(name+","+message);
}
}
被观察者实例——老师
package Observer;
import java.util.ArrayList;
import java.util.List;
public class Teacher implements Subject {
//用来维护所有观察者
List<Observer> list=new ArrayList<Observer>();
//添加观察者
@Override
public void add(Observer observer) {
list.add(observer);
}
//删除观察者
@Override
public void del(Observer observer) {
list.remove(observer);
}
//通知观察者
@Override
public void notify(String message) {
for(Observer ob:list){
ob.update(message);
}
}
}
测试
package Observer;
public class main {
public static void main(String[] args) {
//观察者
Observer student=new Student("王**");
Observer student2=new Student("李**");
//被观察者
Subject teacher=new Teacher();
//订阅
teacher.add(student);
teacher.add(student2);
//发布更新
teacher.notify("上课啦");
}
}
四、写在最后
设计模式的学习,教我们的是一种思想,一种模式,教我们如何解耦,如何分离,重点还是在实际开发中的应用。所以小伙伴们实际开发中一定要用起来呀,写的时候多思考,写完之后多cr。上面的话说给你们,同样也说给我,加油,骚年!