Android中的Java抽象
我在学习一些关于Java语言的教程。我想知道我是否应该在每次编写代码时,在任何类型的标准和堆栈上进行抽象 例如,我已经看到,对于每个Spring服务,我们甚至可以抽象控制器,使用JavaEE堆栈上的EJB接口等 我想知道这样做的目的是什么?在使用Android SDK进行开发时,我应该做同样的事情吗Android中的Java抽象,java,android,refactoring,abstraction,modularity,Java,Android,Refactoring,Abstraction,Modularity,我在学习一些关于Java语言的教程。我想知道我是否应该在每次编写代码时,在任何类型的标准和堆栈上进行抽象 例如,我已经看到,对于每个Spring服务,我们甚至可以抽象控制器,使用JavaEE堆栈上的EJB接口等 我想知道这样做的目的是什么?在使用Android SDK进行开发时,我应该做同样的事情吗 我应该抽象我编写的每个类吗?当您有一个不想实现其所有方法的类时,就需要抽象。继承它的类将被迫实现所有这些方法,否则您也需要将子类声明为抽象类 除此之外,您还应该了解接口,接口的方法不能有主体,好的方
我应该抽象我编写的每个类吗?当您有一个不想实现其所有方法的类时,就需要抽象。继承它的类将被迫实现所有这些方法,否则您也需要将子类声明为抽象类 除此之外,您还应该了解接口,接口的方法不能有主体,好的方面是您的类可以实现您想要的接口。然而,您只能继承一个抽象类。接口就像合同。实现它们的任何类都需要为它们的所有方法提供主体 您是否需要抽象或接口,或者两者都需要,这实际上取决于您的设计和您想要实现的内容。虽然强制具有公共方法的类实现相同的接口(如果您不知道每个方法的主体)或抽象(如果您知道某些、所有或没有方法的主体)是一种很好的做法 另一个例子是,当您有抽象或接口时,如果您向它们添加了一些东西,那么实现它们的所有子类或类都需要遵循这些修改,这意味着可以更容易地进行修改
看看,以及。制作模块化的、可重用的组件总是一个好主意。当一个应用程序从一开始就考虑到这一点时,它变得越来越可伸缩,越来越自我扩展。随着新功能的添加,应用程序中相同的组件可以重复使用,从而节省时间和精力。以后进行更改或确定错误来源变得更容易。重构不应该是事后的,而应该是从头开始的 话虽如此,仅仅为了“抽象”,在移动应用程序中有越来越多的抽象并不是一个好主意。当然,原因是智能手机不如服务器甚至台式电脑强大。Android应用程序中的每个类和虚拟方法都会带来性能损失。在“抽象”和效率之间需要有更大的平衡,在中低端设备上,性能权衡变得更加明显 从官方文件: 1. 2. 3. 4. 5. 编辑:
经过最近的尝试,我不得不承认第2点现在可能有点过时了。我能说什么。。。我参加匕首派对很晚。这可以用许多不同的方式来解释。在我看来,在需要扩展或多种实现类型的情况下,抽象在编码中被用作设计原则。例如,在Spring中,一个控制器可能定义为抽象类(a),并有几个其他类型的控制器(B、C、D…)扩展a。如果您对可用的控制器实现不满意,作为Spring框架的用户,您仍然可以开发自己的控制器扩展A。此外,Spring开发人员也可以在将来的版本中轻松地扩展/添加新控制器。可重用性。唾手可得地 如果你们班有
- 重复代码
- 不同场景的非重复代码
如果您正在构建任何新的东西,那么根应该是接口,或者更少,您可以使用抽象类。
public abstract class BaseReceiverActivity extends AppCompatActivity{
private BroadCastReceiver receiver;
private IntentFilter filter;
public abstract BroadCastReceiver getReceiver();
public abstract IntentFilter getFilter();
@Override
public void onStart(){
super.onStart();
configureReceiver()
registerReceiver(receiver, filter);
}
@Override
public void onStop(){
super.onPause();
unregisterReceiver(receiver);
}
private void registerMyReceiver(){
registerReceiver(receiver, filter);
}
private void configureReceiver(){
receiver = getReceiver();
filter = getFilter();
}
}
public class WifiScanner extends BaseReceiverActivity{
@Override
public void onCreate(Bundle sis){
super.onCreate(sis);
setContentView(R.layout.yourLayout);
}
@Override
public BroadCastReceiver getReceiver(){
return new YourReceiver();
}
@Override
public IntentFilter getFilter(){
return IntentFilter(WifiManager.SCAN_RESULTS_AVAILABLE_ACTION));
}
}