Observer Pattern (in JAVA)

 
Definition-define a one-to-many dependency between objects so that when one object changes state, all its dependents are notified and updated automatically.
relation map

Advantage:

1.       loosely coupled designs

when two objects are loosely coupled, they can interact, but have very little knowledge of each other. The only thing the subject knows about an observer is that it implements a certain interface. And also, we can add new observers at any time. Changes to either the subject or an observer will no affect the other.

2.       Problem oriented

a.       for one-to-many relationship

b.       many objects wants the calls from the subject, which is always described as dependency.

 

Example coded in JAVA:

//Subject.java

  

import  java.util. * ;
public   interface  Subject  {
    
public void registerObserver(Observer o);
    
public void removeObserver(Observer o);
    
public void notifyObservers();
}

 

 //Observer.java

public   interface  Observer  {
    
public void update(String Career,String Knowledge);
}

//InfoCenter.java 

//this is the concrete class of Subject

 

public   class  InfoCenter  implements  Subject  {

    ArrayList observers;
    String CareerInfo;
    String KnowledgeInfo;
    
    
public InfoCenter()
    
{
        observers
=new ArrayList<Observer>();
    }

    
public void notifyObservers() {
        
        
for(int i=0;i<observers.size();i++)
        
{
            Observer o
=(Observer)observers.get(i);
            o.update(
this.CareerInfo,this.KnowledgeInfo);
        }

    }

    
public void SetNewInfomation(String CareerInfo,String KnowledgeInfo)
    
{
        
this.CareerInfo = CareerInfo;
        
this.KnowledgeInfo = KnowledgeInfo;
        notifyObservers();
    }

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


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

    }

    
public String GetCareerInfo()
    
{
        
return this.CareerInfo;
    }

    
public String GetKnowledgeInfo()
    
{
        
return this.KnowledgeInfo;
    }


}

//PeopleSubscrie.java

//this is the concrete class of observer

 


public   class  PeopleSubscribe  implements  Observer  {

    Subject sub;
    
private String CareerInfo;
    
public PeopleSubscribe(Subject sub)
    
{
        
this.sub=sub;
        
this.sub.registerObserver(this);
    }

    
    
public void update(String Career,String Knowledge) {
        
// TODO Auto-generated method stub
        this.CareerInfo = Career;
        Display();
    }

    
private void Display()
    
{
        System.out.println(
"I've subscribed the career infomation,current career info is:");
        System.out.println(CareerInfo);
    }


}

//Main.java

//codes executed

 

public   class  Main  {

    
public static void main(String[] args) {
        
// TODO Auto-generated method stub
        InfoCenter c=new InfoCenter();
        
        Observer people1
=new PeopleSubscribe(c);//subscribe the career information
        Observer people2=new PeopleSubscribe(c);//subscribe the career information
        
        c.SetNewInfomation(
"NJ Software Designer""JDK");
        
        c.removeObserver(people1); 
//remove observer
        
        c.SetNewInfomation(
"BJ System Analysist""AJAX in Java");
    }


}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值