java - 使用接口(interface)而不是稍后实现它的原因

标签 java jsf jpa

我的问题只是:为什么人们这样做:

界面:

public interface CarDAO {

void addCar(Car car);

List<Car> readAll();

void deleteCar(Long id);

}

创建一个实现 carDAO 的类

    public class CarDAOImpl implements CarDAO {

    private SessionFactory sessionFactory;

    private Session getCurrentSession(){

    return sessionFactory.getCurrentSession();

    }

    public void addCar(Car car) {

all the code to add the car    
    }
    public void deleteCar(Car car) {

all the code to delete the car    
    }

为什么不直接创建一个没有接口(interface)的 carCRUD 类?

最佳答案

接口(interface)在任何语言中都是最有值(value)的,因为它可以让你完全分离接口(interface)和实现。

客户端处理接口(interface);他们不需要知道某事是如何完成的。

如果您决定稍后换入新的实现,则可以在不影响客户端的情况下完成此操作。

如果您使用 CRUD 类来执行此操作,则必须重写每个使用它的客户端。

查看 java.sql 包 - 都是接口(interface)。 JDBC 驱动程序供应商提供了实现,因此您不必担心供应商。如果交换数据库,只需将新的 JAR 放入 CLASSPATH 中即可。所有处理接口(interface)的代码仍然有效。

另一个很好的例子是 java.util Collections API。您应该更喜欢 java.util.List 接口(interface)。无论它后面是 ArrayList 还是 LinkedList 对于你的客户来说并不重要。

这是动态代理生成、面向方面编程、模拟以及各种东西的基础。除非您了解如何很好地使用接口(interface),否则您不能认为自己是面向对象的开发人员。

关于java - 使用接口(interface)而不是稍后实现它的原因,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21888318/

相关文章:

jsf - p :editor shows "true" on initial page load

javascript - 如何在 JSf 文件中实现 CSS 和 JavaScript?

java - 我正在使用 bean 验证。在我的实体的 PerPersist 方法中,如果验证失败,如何停止持久化?

jsf - 通过 PrimeFaces 超时 p :idleMonitor

java - SchemaSpy PostgreSQL - 警告 - 连接失败

java - Spring 请求范围与 java 线程本地

java - 显示 int 值时出错 |安卓

mysql - 如何将此 SQL 查询编写为 JPA 查询

java - JPA 2继承@Id属性

java - 文件提供程序不工作