Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用接口的原因,而不是以后实现它_Java_Jsf_Jpa - Fatal编程技术网

Java 使用接口的原因,而不是以后实现它

Java 使用接口的原因,而不是以后实现它,java,jsf,jpa,Java,Jsf,Jpa,我的问题是:人们为什么这样做: 接口: public interface CarDAO { void addCar(Car car); List<Car> readAll(); void deleteCar(Long id); } 为什么不在没有接口的情况下创建carCRUDclass?因为可能有多个实现CarDAO。将在编译时或运行时选择一个 另一个原因是抽象调用方,使其不知道正在使用哪个实现。今天可能是JPA实现,明天可能是MongoDB实现。客户端不需要更改。因为可能

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

接口:

public interface CarDAO {

void addCar(Car car);

List<Car> readAll();

void deleteCar(Long id);

}

为什么不在没有接口的情况下创建carCRUDclass?

因为可能有多个实现
CarDAO
。将在编译时或运行时选择一个


另一个原因是抽象调用方,使其不知道正在使用哪个实现。今天可能是JPA实现,明天可能是MongoDB实现。客户端不需要更改。

因为可能有多个
CarDAO
的实现。将在编译时或运行时选择一个


另一个原因是抽象调用方,使其不知道正在使用哪个实现。今天可能是JPA实现,明天可能是MongoDB实现。客户端不需要更改。

因为可能有多个
CarDAO
的实现。将在编译时或运行时选择一个


另一个原因是抽象调用方,使其不知道正在使用哪个实现。今天可能是JPA实现,明天可能是MongoDB实现。客户端不需要更改。

因为可能有多个
CarDAO
的实现。将在编译时或运行时选择一个


另一个原因是抽象调用方,使其不知道正在使用哪个实现。今天可能是JPA实现,明天可能是MongoDB实现。客户机不需要更改。

接口在任何语言中都是最有价值的,因为它允许您完全分离接口和实现

客户端处理接口;他们不需要知道事情是如何完成的

如果以后决定在新实现中进行交换,则可以在不影响客户端的情况下进行交换

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

看看java.sql包——它都是接口。JDBC驱动程序供应商提供实现,因此您不必担心供应商。如果交换数据库,只需在类路径中放置一个新的JAR。所有处理接口的代码仍然有效

另一个很好的例子是java.util集合API。您应该更喜欢java.util.List接口。它背后是ArrayList还是LinkedList对你的客户来说都无关紧要


这是动态代理生成、面向方面编程、模拟等的基础。除非你理解如何使用接口,否则你不能把自己看作是面向对象的开发人员。

接口在任何语言中都是最有价值的,因为你可以完全分离接口和实现。 客户端处理接口;他们不需要知道事情是如何完成的

如果以后决定在新实现中进行交换,则可以在不影响客户端的情况下进行交换

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

看看java.sql包——它都是接口。JDBC驱动程序供应商提供实现,因此您不必担心供应商。如果交换数据库,只需在类路径中放置一个新的JAR。所有处理接口的代码仍然有效

另一个很好的例子是java.util集合API。您应该更喜欢java.util.List接口。它背后是ArrayList还是LinkedList对你的客户来说都无关紧要


这是动态代理生成、面向方面编程、模拟等的基础。除非你理解如何使用接口,否则你不能把自己看作是面向对象的开发人员。

接口在任何语言中都是最有价值的,因为你可以完全分离接口和实现。 客户端处理接口;他们不需要知道事情是如何完成的

如果以后决定在新实现中进行交换,则可以在不影响客户端的情况下进行交换

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

看看java.sql包——它都是接口。JDBC驱动程序供应商提供实现,因此您不必担心供应商。如果交换数据库,只需在类路径中放置一个新的JAR。所有处理接口的代码仍然有效

另一个很好的例子是java.util集合API。您应该更喜欢java.util.List接口。它背后是ArrayList还是LinkedList对你的客户来说都无关紧要


这是动态代理生成、面向方面编程、模拟等的基础。除非你理解如何使用接口,否则你不能把自己看作是面向对象的开发人员。

接口在任何语言中都是最有价值的,因为你可以完全分离接口和实现。 客户端处理接口;他们不需要知道事情是如何完成的

如果以后决定在新实现中进行交换,则可以在不影响客户端的情况下进行交换

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

看看java.sql包——它都是接口。JDBC驱动程序供应商提供实现,因此您不必担心供应商。如果交换数据库,只需在类路径中放置一个新的JAR。所有处理接口的代码仍然有效

另一个很好的例子是java.util集合API。您应该更喜欢java.util.List接口。它背后是ArrayList还是LinkedList对你的客户来说都无关紧要


这是动态代理生成、面向方面编程、模拟等的基础。除非你懂得如何正确使用接口,否则你不能把自己看作是面向对象的开发者。
    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    
    }