design pattern : Observer

 

Observer模式主要面对一对多的模型。

一个简单的例子,报纸订阅,如果你定了报纸,每天都会有新的报纸送给你和其他低了报纸的人,你可以选择退定,这样你就不会收到新的报纸而其他人人然每天有更新的报纸,你很不爽,于是又定了报纸,这样你又能收到报纸了。

在这个例子里有两个接口,一个是实现报纸的publish,另一个就是Observer,也就是你和其他看报纸的人。

下面是代码实现:

首先是publisher和observer接口

public   interface  Subject  {
    
public void register(Observer o);
    
public void remove(Observer o);
    
public void notifyObsecver();
}


interface  Observer {
    
public void update(String message);
    
public void display();
}

 

下面具体实现发信类(假设报纸就是个message)

import  java.util.ArrayList;

public   class  GroupSetMessage  implements  Subject {
    
private String message;
    
private ArrayList observers;
    
    
public GroupSetMessage(){
        observers 
= new ArrayList();
    }

    
    
public void setMessage(String message){
        
this.message = message;
        notifyObsecver();
    }

    
public void notifyObsecver() {
        
// TODO Auto-generated method stub
        for(int i=0;i<observers.size();i++){
            Observer o 
= (Observer)observers.get(i);
            o.update(
this.message);
        }

    }


    
public void register(Observer o) {
        
// TODO Auto-generated method stub
        observers.add(o);
    }


    
public void remove(Observer o) {
        
// TODO Auto-generated method stub
        int i = observers.indexOf(o);
        
if(i>=0){
            observers.remove(o);
        }

    }


}

 

用户类,有点像你家的邮箱,不过它可以帮你注册。。。

public   class  GroupUser  implements  Observer {
    
private String message;
    
private Subject registeror;
    
    
    
public GroupUser(Subject registeror) {
        
this.registeror = registeror;
        registeror.register(
this);
    }


    
public void display() {
        
// TODO Auto-generated method stub
        System.out.println("this is : " + message);
    }


    
public void update(String message) {
        
// TODO Auto-generated method stub
        this.message = message;
        display();
    }


}

下面是测试,注册3个用户,然后发信。。。。

 GroupSetMessage groupmessage = new GroupSetMessage();
  
  GroupUser user1 = new GroupUser(groupmessage);
  GroupUser user2 = new GroupUser(groupmessage);
  GroupUser user3 = new GroupUser(groupmessage);
  
  groupmessage.setMessage("hi,this afternoon we will have a meeting!");

代码编译过。可执行~~~
  

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值