开闭原?/span>?span style="color: #049a0e;">卻IҎ展开放,对修改关闭?/span>具体怎么做呢Q通过抽象c,从抽象类l承具体cR?br>看最l的代码(只写几个关键的方法,全貌可看最后的UML?Q?br>
订阅Q?
public interface AccountObserver
{
public void upDate(UserAccount userAccount);
}
public class Email implements AccountObserver
{
public void upDate(UserAccount userAccount)
{
}
}
public class Mobile implements AccountObserver
{
public void upDate(UserAccount userAccount)
{
}
}
发布Q?br>
public abstract class Subject
{
List <AccountObserver> observer = new ArrayList<AccountObserver>;
protected void withDraw()
{
//
notify();
}
protected void notify(UserAccount userAccount)
{
for (AccountObserver ao : observer)
{
ao.upDate(userAccount)
}
}
protected void addOberver(AccountObserver accountObserver)
{
observer.add(accountObserver);
}
protected void deleteOberver(AccountObserver accountObserver)
{
observer.remove(accountObserver);
}
}
public class BankAccount extends Subject
{
public void withDraw()
{
//
for (AccountObserver ao : observer)
{
ao.upDate(userAccount)
}
}
}
看UML图:

5.观察者模式概?/span>
q就是观察者模式了Q对比一下官方的UML图,是不是一目了然了呢?
E作说明(q里的依?
都是指广义的依赖)Q?br>1.被观察者ConcreteSubjectl承自Subject抽象c;
2.Subject抽象cM赖于观察者Observer抽象接口Q?br>3.观察者ConcreteObserver实现Observer
接口Q?br>4.观察者ConcreteObserver间接依赖于ConcreteSubjectcR?br>如果要增加具体的观察者,只要再实现Obsever接口卛_Q而被观察方不需要做M修改。而如果需要修改被观察者,只要从Subject?
象类l承卛_?br> 
]]>