java设计模式之观察者模式

①UML设计


②定义:定义对象间一种一对多的依赖关系,使得当每一个对象改变状态,则所有依赖于它的对象都会得到通知并自动更新。

③示例:

/**
 * 定义一个主题(被观察者)
 */
public interface Subject{
   void register(Observer observer);
   void remove(Observer observer);
   void notify(Observer observer);
}
/**
 * 定义一个观察者
 */
public interface Observer{
   void update(String msg);
}
/**
 * 定义具体的主题实现类
 */
public class NewsServer implements Subject{
  List<Observer> observers;
  String message;
  public NewsServer(){
    observers = Lists.newArrayList();
}
  @Override 
  public void register(Observer o){
    obserbers.add(o);
}
  @Override
  public void remove(Observer o){
  if(!observers.isEmpty()) {
    observers.remove(o);
} 
}
  @Override 
  public void notify(){
    observers.forEach(
      o-> {o.update(message);}
);
   public void setMessage(String s){
     this.message = s;
     System.out.println("微信服务更新:" + mesage);
   //消息更新完通知所有的观察者
   this.nofity();
}
}
}
/**
 * 定义具体的观察者
 */
public class User implements Observer{
   String name;
   String message;
   public User(String name){this.name = name;}
   @Override
   public void update(String message){
     this.message = message;
     this.receive();
}
   private void receive{
   System.out.out(name + "收到消息" + message);
}
}
public class Test{
   public static void main(String args){
      //定义服务号      
      NewsSerber ns = new NewsServer();
      //定义用户
      Observer user1 = new User("Ryan");
      Observer user2 = new User("Kiven");
      //注册
      ns.register(user1);
      ns.register(user2);
      //更新消息,会自动通知已经注册的用户
      ns.setMessage("Java is the best language in the world");
}
}






评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值