协议如何运作

面向对象编程的一大好处就是封装。可以使用各种行为来组建应用程序,而这些行为能分为不同但又可以起互动的组件,为这些组件创建对象。

组件可能是一些界面或视图。其他的组件可能是底层的数据或模型的一部分。还有一些事控制器,用于将视图和数据关联起来。但是这些区分并不足够。当创建更多的应用程序时,你会发现自己一遍又一遍的重复做同样类型的事情。

例如,存在一系列相关的屏幕:一个屏幕显示一组数据对象,如Car对象;另一个屏幕显示某个对象的细节,如car detail视图;还有一个屏幕让你编辑该车的属性,如make或year。

哎哟解决该问题,首选也是最经典的方式,是在对象和相关的屏幕中设置引用。详情屏幕(detail screen)会有概览(overview)的引用,属性编译器会拥有到详情屏幕的引用,等等。

然后每个类都实现方法,让另外的类调用。概览视图会有一个方法用于更新一辆汽车。详情视图也会有类似的目的方法。详情视图有一个方法用于更新字段。很快到最后,代码会像一碗意大利面,充斥着各种相互关联的方法、属性和屏幕。某个地方的改动会对其他地方造成重要的影响。代码不灵活而且难以维护。更糟糕的是,类开始明确针对它们所要显示的数据,所以用的一组类以及界面流。这些都不可重用。

使用协议是修复该问题的好方法。协议定义一种类型的对象如何与另一种类型的对象交流:我需要何种信息?我将发送何种信息和状态?以及我能实现何种行为?协议也可以具体致命,代理必须实现哪儿些消息以及哪儿些消息是可选的。

使用协议允许清理这碗意大利面,并且很容易做出变更,因为你知道具体哪儿个类、屏幕或对象如何与另一个交流。可以更改协议的供给者或使用者的整个实现部分的代码,只要他们都遵循该协议即可,并且随着深入,你会开始将常见的需求抽取为类,从而能能在多个项目中重用。

使用协议让这些变得更简单,尤其是在你注意到对象是协议的代理,或是协议的实现而非只是协议时。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章