观察者

java设计模式-回调、事件监听器、观察者模式

空扰寡人 提交于 2020-02-28 13:57:58
背景 关于设计模式,之前笔者写过工厂模式,最近在使用gava ListenableFuture时发现事件监听模型特别有意思,于是就把事件监听、观察者之间比较了一番,发现这是一个非常重要的设计模式,在很多框架里扮演关键的作用。 回调函数 为什么首先会讲回调函数呢?因为这个是理解监听器、观察者模式的关键。 什么是回调函数 所谓的回调,用于回调的函数。 回调函数只是一个功能片段,由用户按照回调函数调用约定来实现的一个函数。 有这么一句通俗的定义: 就是程序员A写了一段程序(程序a),其中预留有回调函数接口,并封装好了该程序。程序员B要让a调用自己的程序b中的一个方法,于是,他通过a中的接口回调自己b中的方法。 举个例子: 这里有两个实体:回调抽象接口、回调者(即程序a) 回调接口(ICallBack ) public interface ICallBack { public void callBack(); } 回调者(用于调用回调函数的类) public class Caller { public void call(ICallBack callBack){ System.out.println("start..."); callBack.callBack(); System.out.println("end..."); } } 回调测试: public static void

设计模式之行为型模式

Deadly 提交于 2019-12-17 19:19:58
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 我们在前面已讨论了12种设计模式。其中涉及的是:变与不变,对变化如何处理,以及调用关系,对不可调用,如何方便实现成为可以调用。剩下的11个模式,都是与行为传递有关的,即不是变与不变的问题,也不是调用关系问题。而是调用流程控制的问题。这是因为,我们使用了类,使用了SOLID原则,调用流程不再是if else 或 switch case。 处理好这样的流程控制,则更易于我们的代码的简化。 Chain of Responsibility(责任链) :为解除请求的发送者和接受者之间耦合,而使多个对象都有机会处理这个请求。将这些对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理它。 这样的做法,使得每一个类中的流程控制得以统一。并且,可以将这样的流程控制封装到对应的类中,而不是由调用者来处理,因而调用者不再需要了解这个链中有多少个程员,该按怎样的顺序调用。从而丢开了调用者与被调用者之间的紧密耦合。 实现方式:被调用者作为具体代码,其类中增加$next属性,保存下一个有责任的类。被调的方法中,判断,有没有$next,如果有,则调用$next中的同名方法。 总结:一次性同时调用多个类中的同一个方法。(类方法递归) 选择模式:通过类的链,实现方法选择的组合。 Command(命令) :将一个请求封装为一个对象

iOS中的常用的几种设计模式

隐身守侯 提交于 2019-12-11 11:56:21
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 总结一下自己在开发中经常用的一些 设计模式 (一)代理模式 应用场景:当一个类的某些功能需要由别的类来实现,但是又不确定具体会是哪个类实现。 优势:解耦合 敏捷原则:开放-封闭原则 实例:tableview的 数据源delegate,通过和protocol的配合,完成委托诉求。 列表row个数delegate 自定义的delegate (二)观察者模式 应用场景:一般为model层对,controller和view进行的通知方式,不关心谁去接收,只负责发布信息。 优势:解耦合 敏捷原则:接口隔离原则,开放-封闭原则 实例:Notification通知中心,注册通知中心,任何位置可以发送消息,注册观察者的对象可以接收。 kvo,键值对改变通知的观察者,平时基本没用过。 (三)MVC模式 应用场景:是一中非常古老的 设计模式 ,通过 数据模型 ,控制器逻辑,视图展示将应用程序进行逻辑划分。 优势:使系统,层次清晰,职责分明,易于维护 敏捷原则:对扩展开放-对修改封闭 实例:model-即数据模型,view-视图展示,controller进行UI展现和数据交互的逻辑控制。 (四) 单例模式 应用场景:确保程序运行期某个类,只有一份实例,用于进行 资源共享 控制。 优势:使用简单,延时求值,易于跨模块 敏捷原则