Java接口继承和扩展

时间:2011-05-10 14:19:44

标签: java oop object-oriented-analysis

想象一下,您正在开发成熟的产品,并且要求50%的产品需要新的搜索功能。现在假设您与SomeDao建立了一个已建立的接口继承关系,您不想破坏...

public interface MoneyDao 
    extends SomeDao<MoneyEntity>
{
    //Operation common in much of the application
    List<MoneyEntity> findByCriteria(MoneyCriteria criteria);     
}

...有没有办法公开方法'findByCriteria(..)',而不是在所有其他类似于MoneyDao的地方重复它,以更清洁的方式需要它?

请记住,我想避免使用新的类型,如果可能的话,使用和修改SomeDao。

此致 詹姆斯

2 个答案:

答案 0 :(得分:5)

您可以将findByCriteria分解为自己的界面并将其扩展到MoneyDao吗?像这样:

public interface MoneyDao 
    extends SomeDao<MoneyEntity>, MoneyFinder
{
}

public interface MoneyFinder
{
    //Operation common in much of the application
    List<MoneyEntity> findByCriteria(MoneyCriteria criteria);     
}

现在,您的实施MoneyDao的课程无需更改,但您可以使用findByCriteria传递MoneyFinder

答案 1 :(得分:1)

这完全取决于你是否想要一个可搜索的类并且是Dao,换句话说,如果你的可搜索类必须也是Dao。如果是这种情况,我会使用通用的方法来制作你的Dao Searchable。

interface SearchableDao<Entity, Criteria> extends SomeDao<Entity> 
{
    List<Entity> findByCriteria(Criteria criteria);
}

现在你的班级可以是一个简单的Dao或SearchableDao。 SearchableDao也是一个简单的Dao。

class MoneyDao implements SearchableDao<MoneyEntity, MoneyCriteria> 
{
    List<MoneyEntity> findByCriteria(MoneyCriteria criteria) {...} 
}