观察者模式


package design.pattern.observer;


/**
 * 抽象一个观察者接口
 * 
 * @author SunOlny
 * 
 */
public interface Observer {


    public String send(String msg);


}



package design.pattern.observer;


/**
 * 消息主题观察者
 * 
 * @author SunOnly
 * 
 */
public class MsgObserver implements Observer {


    private String name;




    public MsgObserver(String name) {
        this.name = name;
    }




    /*
     * (non-Javadoc)
     * 
     * @see design.pattern.observer.Observer#send(java.lang.String)
     */
    @Override
    public String send(String msg) {
        return name + msg;


    }
}






package design.pattern.observer;


import java.util.List;




/**
 * 抽象一个主题接口
 * 
 * @author SunOlny
 * 
 */
public interface Subject {


    boolean addListener(Observer ob);




    boolean removeListener(Observer ob);




    boolean addListeners(List<Observer> list);




    void watcher();


}


package design.pattern.observer;


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




/**
 * 实现一个消息主题类
 * 
 * @author SunOlny
 * 
 */
public class MsgSubject implements Subject {
    private List<Observer> list = new ArrayList<Observer>();




    @Override
    public boolean addListener(Observer ob) {
        return list.add(ob);
    }




    @Override
    public boolean removeListener(Observer ob) {
        return list.remove(ob);
    }




    @Override
    public boolean addListeners(List<Observer> list) {
        return list.addAll(list);
    }




    @Override
    public void watcher() {
        for (Observer ob : list) {
            System.out.println(ob.send("发送消息"));
        }


    }


}


package design.pattern.observer;


import org.junit.Test;




/**
 * @author SunOlny
 * 
 */
public class TestObserver {


    @Test
    public void testMsgObject() {
        Subject subject = new MsgSubject();
        subject.addListener(new MsgObserver("我是订阅者1"));
        subject.addListener(new MsgObserver("我是订阅者2"));
        subject.addListener(new MsgObserver("我是订阅者3"));
        subject.watcher();


    }
}

测试结果

 


观察者模式一般解决消息发布/消息订阅,具体应用场景比如java中awt中各种事件使用的模式。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值