广大程序猴同胞,经常看到“解耦”。 另外,很多人用这个词加x。 但是,实际上真正能理解的人并不多。 接下来,关于解耦的方法,让我们来深入挖掘一下大家。
首先,你需要知道为什么要解除耦合。 通常,创建项目会使用许多基本功能块,如xxx通信协议和xxxView。 将这样的功能块封装在一个库中。 如果此库只能在此指定项目中运行,则这称为“高耦合”,如果下次遇到类似的项目,则必须使用相同的功能块;假设每次使用json时,您都不改造json库
但事与愿违,根据情况,真的解不开结合。
这里,我们先举个栗子,比如排序。
是排序功能。 对大多数比较初步的程序员来说,可能是这样写的。
监听器(listintegerlist,简称监听器)至此引发了一个问题。 此方法只能对int类型数据进行排序。 如果在下一个项目中,需要用于对字符串进行排序,那就太尴尬了。 明明看起来会成功,但我觉得更糟。 是的,是不好的地方。 是解除代码连接的密钥。
首先,明确需要排序功能。 在此过程中,不可避免地需要使用两个数据的大小比较。 这个数据可以是任何数据。 也就是说,可以确定排序算法以创建不动的库,但不能匹配单个数据大小。 或者是库的结合点。 我该怎么办?
我们只要向使用这个功能块的人请教就可以了。
接下来,让我们假设Android库中有一个已排序的api
collections.sort (列表列表,比较器? super T c; 这里,称为Comparator的接口是使用者需要实现并传递的接口。 这样,该排序功能块就可以应用于任何场合,开发一次,实现一生的目的。 厉害吗?
我们再举个栗子,socket
我们在开发时经常使用套接字库,但套接字是最常用和最常用的功能之一是“连接-发送数据-接收数据-断开连接-回调结果”
所以,如果需要将这个流程封装成一个功能块,那就有意义了。
但是,这里有一个问题。 阻碍打包的是’接收数据-断开连接‘。 套接字读取数据时,它是inputStream,也是流。 换句话说,实际上,我们不知道数据是如何完全接收/完成的
有可能。 也有在前两个字节中判断整个数据长度的协议
有可能。 有些协议包含帧头、帧尾和转义字符,以确定整个数据的长度
.
这让我们很烦恼。 那个是怎么解决的? 不知道的东西,请向APP请教吧。 和上面一样,接受一个协议来实现吧。
publicinterfaceunzipdataaction (/返回null,表示未完全接收,继续接收,返回完整的byte[][][] )认为接收完成,并将结果返回到APP应用程序}因此,我们将整个“连接-发送数据-接收数据-断开连接-回调结果”过程封装在一个通用功能块中。
解耦总结来说就是:你能知道的东西就写死,不知道但是又必须知道的东西,就让应用程序来告诉你,在java里面叫接口,在有些语言(OC, swift, C/C++)里面叫做代码段。
飞艇稳赚不赔的打法常使用套接字库,但套接字是最常用和最常用的功能之一是“连接-发送数据-接收数据-断开连接-回调结果”
所以,如果需要将这个流程封装成一个功能块,那就有意义了。
但是,这里有一个问题。 阻碍打包的是’接收数据-断开连接‘。 套接字读取数据时,它是inputStream,也是流。 换句话说,实际上,我们不知道数据是如何完全接收/完成的
有可能。 也有在前两个字节中判断整个数据长度的协议
有可能。 有些协议包含帧头、帧尾和转义字符,以确定整个数据的长度
.
这让我们很烦恼。 那个是怎么解决的? 不知道的东西,请向APP请教吧。 和上面一样,接受一个协议来实现吧。
publicinterfaceunzipdataaction (/返回null,表示未完全接收,继续接收,返回完整的byte[][][] )认为接收完成,并将结果返回到APP应用程序}因此,我们将整个“连接-发送数据-接收数据-断开连接-回调结果”过程封装在一个通用功能块中。
解耦总结来说就是:你能知道的东西就写死,不知道但是又必须知道的东西,就让应用程序来告诉你,在java里面叫接口,在有些语言(OC, swift, C/C++)里面叫做代码段。