iOS — SOLID原则第3页– Liskov替代原则

Liskov替换原理非常简单。
它指出:

“程序中的对象应该可以用其子类型的实例替换,而不会改变程序的正确性。”

本质上,在iOS中,这意味着您应该以一种方式对类/协议进行建模,以便可以将符合该协议的任何子类/类型替换为子类型,而不会改变程序的正确性。

例如,您有一个MyClass类。
MyClass使用另一个模块执行任务,我们称它为OperationExecuterOperationExecuter可以是协议或类。
您有一个新的子类型,该子类型可以子类化/符合OperationExecuter ,我们称其为FasterOperationExecuter

您可以在MyClass中替换FasterOperationExecuter (如果我们通过依赖注入使用OCP的话),而无需更改其正确性。


以第2部分(OCP)中的最后一个示例为例:

并给出替换示例,也来自上一部分:

  let imageStorage = NoirImageStorage(访问器:RemoteServerFilesAccessor()) 

我们已经完成了LSP。 如果现在将imageStorage属性更改为使用NoirImageStorage ,则所有操作仍将相同。
LSP就是这样。

我们还将ImageStorage使用的FileAccessor更改为RemoteServerFilesAccessor ,而不是DocumentDirectoryFileAccessor

我们的imageStorage仍然按照其需要执行操作,只是有所不同。
它仍然会拍摄图像并将其存储在我们的存储层中
(除了现在也使用服务层)。

在第一个示例中,它拍摄一张图像并将其保存到文档目录中。
在第二个示例中,它将拍摄图像,对其应用Noir效果,然后将其存储在远程服务器中。

我们没有更改ProfilePicManager的正确性。 它仍然执行需要完成的任务(只是有所不同),我们没有改变它的正确性。

转到第4部分- 接口隔离原理。