在Android中与Java的抽象

我正在学习一些关于Java语言的教程。 我在想,如果每次我编码的东西,以及任何types的标准和堆栈,我是否应该抽象

我已经看到,例如每个Spring服务,我们甚至可以抽象控制器,使用JavaEE堆栈上的EJB接口。

我想知道那是什么目的? 我应该在使用Android SDK进行开发时做同样的事情吗?

我应该抽象每一个我编码的类吗?

Solutions Collecting From Web of "在Android中与Java的抽象"

制造模块化可重复使用的组件总是一个好主意。 当从头开始构build应用程序时,它将变得越来越可伸缩 ,越来越自我扩展 。 随着新function的添加,应用程序中的相同组件将被重新使用,从而节省时间和精力。 稍后进行更改或识别错误来源变得更容易。 重构不应该是事后,而是从一开始。

话虽如此,为了“抽象”,在移动应用程序中提取越来越多的抽象概念并不是一个好主意。 当然,原因是智能手机不如服务器甚至台式电脑强大。 在Android应用程序中,每一个类和虚拟方法都会带来性能损失。 在“抽象”和效率之间需要有一个更大的平衡,在中低端设备上,性能权衡更加明显。

从官方文档:

1. 小心代码抽象

2. 避免dependency injection框架

3. 避免创build不必要的对象

4. 优先考虑静态虚拟

5. 避免内部获得者/设置者

编辑:

在最近尝试了匕首之后 ,我不得不承认第二点可能已经过时了一些。 我能说什么…我来到匕首派对很晚。

每当有一个你不想实现所有方法的类时,你就需要抽象。 那些inheritance它的类将被迫实现所有这些方法,否则你需要声明这个子类也是抽象的。

除此之外,你应该知道接口,接口的方法不能有正文,好处是你的类可以实现尽可能多的接口,只要你想。 而你只能inheritance一个抽象类。 接口就像合同一样。 无论哪个class级实施他们,都需要为他们所有的方法提供机构。

无论您是需要抽象还是界面还是两者都取决于您的devise以及您想实现的内容。 尽pipe强制这些具有通用方法的类实现相同的接口(如果您对每个方法的主体没有任何了解)或抽象(如果您知道某些,全部或者没有方法)

另一个例子是当你有抽象或接口,如果你添加一些东西给他们所有的子类或类实现他们需要遵循这些修改,这意味着可能会更容易被修改。

看看这个 , 这个和这个 开放/closures的原则 。

这可以用许多不同的方式来解释。 在我看来,在编码中抽象被用作devise原则,在需要扩展或多种types的实现的情况下。 例如,在Spring中,一个控制器可能定义为一个抽象类(A),并且有几个其他types的控制器(B,C,D ..),作为Spring框架的用户,如果你不满足可用的控制器实现,仍然可以开发自己的控制器扩展A.另外,Spring开发人员也可以轻松地在未来版本中扩展/添加新的控制器。