版权声明:个人博客:https://blog.csdn.net/qq_22754377 转载请注明出处 https://blog.csdn.net/qq_22754377/article/details/82118490
1.观察者模式介绍与设计思路:
维基百科定义:观察者模式是软件设计模式的一种。在此种模式中,一个目标对象管理所有相依于它的观察者对象,并且在它本身的状态改变时主动发出通知。这通常透过呼叫各观察者所提供的方法来实现。此种模式通常被用来实时事件处理系统。
2.观察者模式代码实现
观察者抽象接口
/**
* @Description: 观察者抽象类
* @Param:
* @return:
* @Author: Wtk
* @Date: 2018/8/25
*/
public interface Oberser {
void update(String text);
}
观察者具体实现类
/**
* @program: DesignPatterns
* @description:观察者qqchat
* @author: Mr.Wang
* @create: 2018-08-25
**/
public class QQchatOberser implements Oberser {
@Override
public void update(String text) {
System.out.println(this.getClass().getName()+":"+text);
}
}
/**
* @program: DesignPatterns
* @description:观察者msg
* @author: Mr.Wang
* @create: 2018-08-25
**/
public class MsgOberser implements Oberser {
@Override
public void update(String text) {
System.out.println(this.getClass().getName()+":"+text);
}
}
/**
* @program: DesignPatterns
* @description:观察者wechat
* @author: Mr.Wang
* @create: 2018-08-25
**/
public class WechatOberser implements Oberser {
@Override
public void update(String text) {
System.out.println(this.getClass().getName()+":"+text);
}
}
被观察者接口
/**
* @Description: 被观察者抽象类
* @Param:
* @return:
* @Author: Wtk
* @Date: 2018/8/25
*/
public interface Subject {
void notification(String text);
void addObserver(Oberser oberser);
void removeObserver(Oberser oberser);
}
被观察者具体实现类
/**
* @program: DesignPatterns
* @description:被观察者具体实现的功能
* @author: Mr.Wang
* @create: 2018-08-25
**/
public class SubjectImpl implements Subject {
private List<Oberser> obersers= new LinkedList<>();
@Override
public void notification(String text) {
for(Oberser oberser: obersers){
oberser.update(text);
}
}
@Override
public void addObserver(Oberser oberser) {
obersers.add(oberser);
}
@Override
public void removeObserver(Oberser oberser) {
obersers.remove(oberser);
}
}
测试代码
/**
* @program: DesignPatterns
* @description: 测试观察者模式代码
* @author: Mr.Wang
* @create: 2018-08-25
**/
public class OberverMain {
public static void main(String[] args){
Subject subject = new SubjectImpl();
Oberser msgOberser = new MsgOberser();
Oberser wechaOberser = new WechatOberser();
Oberser qqchatOberser = new QQchatOberser();
//添加观察者
subject.addObserver(msgOberser);
subject.addObserver(wechaOberser);
subject.addObserver(qqchatOberser);
subject.notification("第一次收到");
//移除msg观察者
subject.removeObserver(msgOberser);
subject.notification("第二次收到");
}
}
源码地址:https://github.com/wangtengke/DesignPatterns
个人博客:https://blog.csdn.net/qq_22754377