最近我接手了一个基于 MVP 构建的 android 项目。虽然简单的屏幕非常简单且易于阅读和维护,但应用程序的更复杂的部分却不然。多个继承级别导致我在类之间切换数天,试图找出信息流实际上是如何工作的。
以下是问题较多的层次结构的一个示例:
既然我们使用 MVP,那么图中的每个类自然都会有另一个演示者类和另一个视图类。
于是我做了一些研究,发现了这篇文章:MVP 中的组合与继承 https://stackoverflow.com/questions/14544504/composition-vs-inheritance-in-mvp它基本上是说在这种情况下组合应该优先于继承。
它没有说的是如何在 android 中应用它。我想了一会儿,但想不出一个好的模式。我可以做自定义视图,但他们最终会如何使用演示者?
继承虽然非常强大,但很容易被误用,当不可避免的事情发生时,即需求发生变化时,继承很容易破坏继承性。开闭原则 https://en.wikipedia.org/wiki/Open/closed_principle由于其不灵活性。程序员必须修改现有的类,这反过来又会破坏客户端代码。
这就是为什么组合通常比继承更受青睐的原因。它为不断变化的需求提供了更大的灵活性。
这个设计原则准确地表达了:
-
封装不同的内容。
识别代码中不同的方面并将它们分开
什么保持不变。这样我们就可以改变它们而不影响代码的其余部分。
继续你的问题,读完你的问题后我想到的第一件事是:为什么不使用策略模式! https://en.wikipedia.org/wiki/Strategy_pattern
您可以采取的方法是:
BaseMapViewFragment
将包含所有派生类共有的所有代码。对于不同类型的行为(不同的事情)有单独的接口。您可以根据您的要求创建具体的行为类。将这些行为接口作为类字段引入BaseMapViewFragment
。现在扩展的类BaseMapViewFragment
将使用具体的行为类初始化所需的行为。
无论我在上一段中所说的是什么,都可能会令人困惑(我的英语也不是那么好:D),但我只是解释了策略模式的工作原理,仅此而已。
这里还有另一个设计原则在起作用:
-
对接口编程,而不是实现。策略模式使用它来实现变化的代码。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)