原文地址: [url=http://blog.csdn.net/swengineer/article/details/6268244]观察者模式应用场景实例[/url]
个人觉得,对设计模式的学习,必须具体到真实的场景,就像这篇文章一样。
技术就是技术,那种“小明小红”什么的看似通俗易懂但需要相当的经验才能体会的解说套路,真不适合初学者。
这篇文章是用 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);
}
}
}