今天爱分享给大家带来写适配器模式、观察者模式?【面试题详解】,希望能够帮助到大家。
适配器模式:
Target:定义 Client 使用的与特定领域相关的接口
public interface Target { void request(); }
Adaptee:现在需要适配的已经存在的接口
public class Adaptee { public void specificRequest(){} }
Adapter:对 Adaptee 的接口与 Target 接口进行适配
public class Adapter implements Target { public Adapter(Adaptee adaptee) { super(); this.adaptee = adaptee; } public void request() { adaptee.specificRequest(); } private Adaptee adaptee; }
观察者模式:
Subject:
1. Subject 可以加将 Observer 对象的引用保存在一个聚集中,每个 Subject 可以有任意个 Observer。
2. 提供注册和删除 Observer 对象的接口。
public interface Subject { public void registerObserver(Observer o); public void removeObserver(Observer o); public void notifyObservers(); }
Observer:
1. 为那些在 Subject 发生改变时需获得通知的对象定义一个更新接口。
public interface Observer { public void update(); }
Concrete Subject:
1. 将有关状态存入各 ConcreteObserver 对象,当它的状态发生改变时,向它的各个观察者发出通知。
public class ConcreteSubject implements Subject { private ArrayListobservers; public ConcreteSubject() { observers = new ArrayList (); } public void registerObserver(Observer o) { observers.add(o); } public void removeObserver(Observer o) { int i = observers.indexOf(o); if (i >= 0) { observers.remove(i); } } public void notifyObservers() { for (int i = 0; i < observers.size(); i++) { observer = observers.get(i); observer.update(); } } public void stateChanged() { notifyObservers(); } public void setState() { stateChanged(); }}
Concrete Observer:
1. 维护一个指向 ConcreteSubject 对象的引用。
2. 存储有关状态,这些状态应与 Subject 的状态保持一致。
3. 实现 Observer 的更新接口以使自身状态与 Subject 的状态保持一致。
public class ConcreteObserver implements Observer { private Subject subject; public ConcreteObserver(Subject subject) { this.subject = subject; subject.registerObserver(this); } public void update() { // your code }}