通过不同的Java类实现公共接口
我在这里有一种方法,可以根据给定的参数(用户名、密码等)将用户添加到数据库中 这里有一个用于将通过不同的Java类实现公共接口,java,database,object,interface,Java,Database,Object,Interface,我在这里有一种方法,可以根据给定的参数(用户名、密码等)将用户添加到数据库中 这里有一个用于将User对象添加到ArrayList public boolean addUser(User username) { if(users.contains(username)) //do stuff... 但是,我试图通过一个公共接口实现这两种情况: public interface Admin_DAO { public void addUser(); //ot
User
对象添加到ArrayList
public boolean addUser(User username)
{
if(users.contains(username))
//do stuff...
但是,我试图通过一个公共接口实现这两种情况:
public interface Admin_DAO {
public void addUser();
//other methods...
class AddUserToList implements Admin_DAO{
public void addUser(User user){
//add user to list
}
class addUserToDB implements Admin_DAO{
public void addUser(User user){
//add user to list
}
考虑到两个类需要不同的参数,我不确定如何才能实现相同的接口
有什么想法吗?将参数包装到接口中
public interface IUser{
String getName();
String getPassword();
//etc
}
public interface AdminDAO {
public boolean addUser(User user);
}
然后让你的管理员接受IUsers
public interface Admin_DAO{
void addUser(IUser user);
boolean contains(IUser user);
}
这允许抽象管理实现细节。它可以是一个数据库,或者只是一个内存中的数据结构。让它接受包装在接口中的数据可以传递相同类型的对象。您无法实现具有多个不同签名的接口方法。 既然我已经排除了这个问题,让我澄清一下。接口包括方法签名。您不能通过更改方法签名来实现该接口,因为这从根本上改变了Java对方法的看法。Java认为两个具有不同签名的方法就像它们有不同的名称一样不同。因此,您可以使用两个不同的
addUser
方法编写一个类,但其中只有一个方法将从接口重写该方法
public interface IUser{
String getName();
String getPassword();
//etc
}
public interface AdminDAO {
public boolean addUser(User user);
}
如果您的方法需要完全不同的信息,它们可能不应该实现相同的接口。但是,如果它们需要基本相同的信息,但格式不同,那么您应该编写一个接口,该接口接受该信息的通用格式,然后它们都可以实现它。例如,如果一个用户
看起来基本上是这样的:
public User(String username, String password, String f_name, String l_name, String email) {
}
然后,您可以使界面接受用户
对象
public interface Admin_DAO {
public void addUser(User u);
}
然后,您可以根据需要在不同的类中实现它。更改管理DAO以接受用户数据对象,以适应将来对需要传递的参数数量所做的任何更改,而不影响公共接口
public interface IUser{
String getName();
String getPassword();
//etc
}
public interface AdminDAO {
public boolean addUser(User user);
}
然后在用户DAO中将此方法作为重载实现。我还建议您以char[]
的形式存储或传递密码,以防止实习(添加到Java字符串池中)
编辑:(根据OP下面的评论扩展接口)理想情况下,应该有两个类。由于两种方法使用的信息相同。您的界面应如下所示:
interface Admin_DAO{
public void addUser(User user);
}
您应该有两个单独的类来实现这个接口:
public interface Admin_DAO {
public void addUser();
//other methods...
class AddUserToList implements Admin_DAO{
public void addUser(User user){
//add user to list
}
class addUserToDB implements Admin_DAO{
public void addUser(User user){
//add user to list
}
每门课实际上应该有一个目的。简短的回答你不能。 以下是GoF设计模式书中我最喜欢的几段。下面的文本将清除您的任何查询。你可能想读几遍 对象声明的每个操作都指定该操作的名称, 它作为参数的对象,以及操作的返回 值。这称为操作的签名。所有 由对象操作定义的签名称为接口 对该对象。一个对象的接口描述了一套完整的 可以发送到对象的请求。任何符合 对象接口中的签名可以发送给对象 类型是用于表示特定接口的名称。我们说的是一个 对象,如果它接受对 在名为“Window”的接口中定义的操作。对象可以 具有许多类型,并且不同的对象可以共享一个类型。部分 对象接口的类型可以由一种类型和另一种类型表示 被其他类型分割。相同类型的两个对象只需共享 它们的部分接口。接口可以包含其他接口,如 子集。我们说一个类型是另一个类型的子类型,如果它的接口 包含其超类型的接口。我们经常谈论一个亚型 继承其超类型的接口 接口是面向对象系统的基础。对象是 只有通过他们的接口才知道。没有办法知道任何事情 关于一个物体,或者要求它做任何事情而不经过它的 接口。一个对象的接口对它的 实现不同的对象可以自由地实现请求 不一样
创建一个
用户
并将其传入。或者使用方法重载。我的回答很好地恭维了你的回答。这似乎很有效,但我不能让用户实现AdminDAO的所有方法,例如ban和unban。用户应该只能添加他自己(register)。然后,您可以在这里将常用方法分解到不同的接口中,比如说IUser,并让您的AdminDAO接口扩展它,而无需重复相同的方法声明。现在用户将只实现IUser,DAO将实现扩展的AdminDAO。