请教Interface的设计思路

其实问题与jfinal没有太大关系,但习惯性的喜欢来这里请教,还请 @JFinal 海涵

假设有这样一个Interface:

public interface UserInterface {
    //...
}

然后呢,个别Model实现这个Interface,比如:

public class User extends BaseUser<User> implements UserInterface {
    //...
}

这样做的目的,是想对某些Service进行抽象,比如:

public interface UserServiceInterface {
    public List<UserInterface> findUser(int age);
}

最后UserServiceInterface的实现类中:

public class UserService implements UserServiceInterface {
    public List<UserInterface> findUser(int age){
        List<User> users = User.dao.find("select...");
        //return users; //无法自动将List<User> => List<UserInterface>
        List<UserInterface> iusers = new ArrayList<UserInterface>();
        iusers = Arrays.asList(users.toArray(new UserInterface[0]));
        return iusers; //类型转换完成,返回
    }
}

这样的话,效率肯定会受到影响。

写不下去了,心里明白应该是我的设计思路有问题

其实目标只想将Service抽象出来,实现某些底层Model与外部逻辑的解耦,便于在重写Service时不至于对底层业务产生影响。

想知道这种情况该如何处理

评论区

JFinal

2017-10-25 10:43

依存关系越多越复杂,系统就越不稳定,相反依存关系越少越简单,系统越稳固

上面这些 interface 没有实质意义,只会把事情搞得更复杂。接口主要是用来对事物、概念进行抽象,便于人类思维格律对其进行建模、理解、处理,当抽象无法达成这几个目标,就是制造麻烦

netwild

2017-10-25 11:35

@JFinal 其实我也是想学习jfinal的写法,比如:
me.setRenderFactory(IRenderFactory renderFactory);
类似的,提问中的可定义为:
Util.setUserService(UserServiceInterface userService);
然后在底层业务中只面向UserServiceInterface来执行各种操作
问题是接口中一旦定义了List,在实现类中没办法高效返回结果

JFinal

2017-10-25 12:26

@netwild jfinal 中的 IRenderFactory 接口具有非常明确的目的,就是为了实现 Render 实现类的接管,对 RenderFactory 进行抽象便可实现

热门反馈

扫码入社