java常用设计模式-观察者模式

观察者模式:

设计到的角色:

主题:是一个接口,同时必须包含一个观察者列表,必须有添加,删除,通知观察者的方法

具体主题:主题的实现类

观察者:也是接口,接口中需要定义接到通知之后的操作

具体观察者:观察者的实现类,同时观察者要订阅主题则需要注册,即必须要添加到主题的观察者列表中,取消订阅则是删除

当主题的状态发生变化的时候,所有的观察者都得到通知

 

主题:

package com.design2;

public interface SubjectInterface {
void add(ObserverInterface observer);
void delete(ObserverInterface observer);
void notifyObserver();
void giveMess(String mess);
}

具体主题:

package com.design2;

import java.util.ArrayList;
import java.util.List;

public class Subject implements SubjectInterface {
List<ObserverInterface> observerList;
String mess;
boolean isNotify;
public Subject(){
observerList = new ArrayList<ObserverInterface>();
mess = "";
isNotify = false;
}
@Override
public void add(ObserverInterface observer) {
if (observer != null && !observerList.contains(observer)) {
observerList.add(observer);
}

}

@Override
public void delete(ObserverInterface observer) {
if (observerList.contains(observer)) {
observerList.remove(observer);
}
}

@Override
public void notifyObserver() {
if (isNotify) {
for (ObserverInterface object : observerList) {
object.update(mess);
}
}
}

@Override
public void giveMess(String message) {
if (mess.equals(message)) {
isNotify = false;
} else {
mess = message;
isNotify = true;
}
}
}

观察者接口:

package com.design2;

public interface ObserverInterface {
void update(String mess);
}

 

观察者:

package com.design2;

public class Observer implements ObserverInterface {
private String name;
private SubjectInterface subject;
public Observer(String name,SubjectInterface subject){
this.name = name;
subject.add(this);
}

@Override
public void update(String mess) {
System.out.println(name + "接受的消息:" + mess);
}

}

 

测试:

package com.design2;

public class Application {
public static void main(String[] args) {
SubjectInterface subject = new Subject();
ObserverInterface zhangsan = new Observer("zhangsan", subject);
ObserverInterface lisi = new Observer("zhangsan", subject);
subject.giveMess("123");
subject.notifyObserver();
subject.giveMess("123");
subject.notifyObserver();
subject.giveMess("456");
subject.notifyObserver();
}
}

 

转载于:https://www.cnblogs.com/xiaokang-share/p/9270909.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值