【转】观察者模式

原文地址: 观察者模式应用场景实例

个人觉得,对设计模式的学习,必须具体到真实的场景,就像这篇文章一样。

技术就是技术,那种“小明小红”什么的看似通俗易懂但需要相当的经验才能体会的解说套路,真不适合初学者。

这篇文章是用 php 写的,把它翻译成 Java ,代码大致如下:
购票核心业务(被观察者):
public class TicketService extends Observable {

    public void buyTicket(int i) {
        String ticket = "ticket_" + i;
        // 通知全部观察者
        setChanged();
        notifyObservers(ticket);
    }

    private static final TicketService instance = new TicketService();

    private TicketService() {
    }

    public static TicketService getInstance() {
        return instance;
    }

    @Override
    public String toString() {
        return "TicketService";
    }

}


外围服务(观察者):
public class Sms implements Observer {

    // 购票核心逻辑执行完毕后,会通知所有的观察者。本方法为观察者得到通知后执行的业务逻辑,此例为发送短信。
    @Override
    public void update(Observable o, Object arg) {
        System.out.println(o + ": " + arg);
        System.out.println("****** Sending sms. ******");
    }

    public void register() {
        TicketService.getInstance().addObserver(this);
    }

    private static final Sms instance = new Sms();

    private Sms() {
    }

    public static Sms getInstance() {
        return instance;
    }

}


Main :
public class Main {

    public static void main(String[] args) {
        TicketService ticketService = TicketService.getInstance();
        Log log = Log.getInstance();
        Sms sms = Sms.getInstance();
        log.register();
        sms.register();

        for (int i = 0; i < 3; i++) {
            ticketService.buyTicket(i);
        }
    }

}

猜你喜欢

转载自dsxwjhf.iteye.com/blog/2297420