【转】观察者模式
程序员文章站
2022-05-04 08:57:48
...
原文地址: 观察者模式应用场景实例
个人觉得,对设计模式的学习,必须具体到真实的场景,就像这篇文章一样。
技术就是技术,那种“小明小红”什么的看似通俗易懂但需要相当的经验才能体会的解说套路,真不适合初学者。
这篇文章是用 php 写的,把它翻译成 Java ,代码大致如下:
购票核心业务(被观察者):
外围服务(观察者):
Main :
个人觉得,对设计模式的学习,必须具体到真实的场景,就像这篇文章一样。
技术就是技术,那种“小明小红”什么的看似通俗易懂但需要相当的经验才能体会的解说套路,真不适合初学者。
这篇文章是用 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); } } }
上一篇: 责任链模式