欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

【转】观察者模式

程序员文章站 2022-05-04 08:57:48
...
原文地址: 观察者模式应用场景实例

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

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

这篇文章是用 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);
        }
    }

}