今天小熙有时间,写了下观察者模式,记录下。在23种设计模式中偏向于行为型模式。
他主要指多个对象间存在一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。这种模式有时又称作发布-订阅模式、模型-视图模式,所以是对象行为型模式。
图解:
代码:
import java.time.LocalDateTime; import java.util.ArrayList; import java.util.List; /** * 这里的观察者可以看似事件源,监听器可以看做受影响者。 * 事件类eventClass也可以改成抽象被继承 * * @author chengxi * @date 2020/9/3 10:43 */ public class TestClass { public static void main(String[] args) { ListenerClassOne listenerClassOne = new ListenerClassOne(); ListenerClassTwo listenerClassTwo = new ListenerClassTwo(); ObserverClass observerClass = new ObserverClass(); observerClass.addListenerClass(listenerClassOne).addListenerClass(listenerClassTwo); observerClass.executeTrigger("触发监听器"); } } class ObserverClass { public List<ListenerClass> listenerClassList = new ArrayList<>(); /** * 执行性触发监听器的方法 * @param description */ public void executeTrigger(String description){ EventClass eventClass = new EventClass(); eventClass.description = description; listenerClassList.forEach(f -> f.executeListener(eventClass)); } public ObserverClass addListenerClass(ListenerClass listenerClass){ listenerClassList.add(listenerClass); return this; } } interface ListenerClass { /** * 执行监听方法 * @param eventClass */ void executeListener(EventClass eventClass); } class ListenerClassOne implements ListenerClass { @Override public void executeListener(EventClass eventClass) { System.out.println(eventClass.description + ": 执行监听器一的方法"); } } class ListenerClassTwo implements ListenerClass { @Override public void executeListener(EventClass eventClass) { System.out.println(eventClass.description + ": 执行监听器二的方法"); } } class EventClass { LocalDateTime time; String description; }以上小熙写的可以适合下列场景:
对象间存在一对多关系,一个对象的状态发生改变会影响其他对象。当一个抽象模型有两个方面,其中一个方面依赖于另一方面时,可将这二者封装在独立的对象中以使它们可以各自独立地改变和复用。