【转】观察者模式

原文地址: [url=http://blog.csdn.net/swengineer/article/details/6268244]观察者模式应用场景实例[/url]

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

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

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

}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值