【设计模式】6.设计模式原则-接口隔离原则

得意时要看淡,失意时要看开。不论得意失意,切莫大意;不论成功失败,切莫止步。志得意满时,需要的是淡然,给自己留一条退路;失意落魄时,需要的是泰然,给自己觅一条出路【设计模式】6.设计模式原则-接口隔离原则,希望对大家有帮助,欢迎收藏,转发!站点地址:www.bmabk.com,来源:原文

一、原则:

  一个类对另一个类的依赖应该建立在最小的接口上。要为各个类建立它们需要的专用接口,而不要试图去建立一个很庞大的接口供所有依赖它的类去调用。

二、作用:

  1.将臃肿庞大的接口分解为多个粒度小的接口,可以预防外来变更的扩散,提高系统的灵活性和可维护性。

  2.接口隔离提高系统的内聚性,减少了对外交互,降低了系统的耦合性。

  3.如果接口的粒度大小定义合理,能够保证系统的稳定性;但是,如果定义过小,则会造成接口数量过多,使设计复杂化;如果定义太大,灵活性降低,无法提供定制服务,给整体项目带来无法预料的风险。

  4.使用多个专门的接口还能够体现对象的层次,因为可以通过接口的继承,实现对总接口的定义。

  5.能减少项目工程中的代码冗余。过大的接口里面通常放置许多不用的方法,当实现这个接口的时候,被迫设计冗余的代码。

三、实现:

  1.接口尽量小,但是要有限度。一个接口只服务于一个子模块或业务逻辑。

  2.为依赖接口的类定制服务。只提供调用者需要的方法,屏蔽不需要的方法。

  3.了解环境,拒绝盲从。每个项目或产品都有选定的环境因素,环境不同,接口拆分的标准就不同,深入了解业务逻辑。

  4.提高内聚,减少对外交互,使接口用最少的方法去完成最多的事情。

  5.分功能分模块在不同接口中定义,方便子类实现或者继承。

四、涉及到的设计模式

  抽象工厂模式、简单工厂模式、工厂模式、模板方法、命令模式、代理模式

五、示例

  比如一个后台管理系统用包含了用户的增删改查、角色的增删改查、菜单的增删改查操作,如果直接定义一个笼统的接口SystemService类,实现它的实现类都要重写用户、角色、菜单的增删改查操作,一个实现类会比较臃肿,多个实现类则会有很多冗余操作。

  不符合接口隔离原则的示例:

  SystemService类:

public interface SystemService {
    void addUser(User user);

    void deleteUser(User user);

    void addRole(Role role);

    void deleteRole(Role role);
}

  SystemServiceImpl类:

@Service
public class SystemServiceImpl implements SystemService {
    @Override
    public void addUser(User user) {
        System.out.println("添加用户");
    }

    @Override
    public void deleteUser(User user) {
        System.out.println("删除用户");
    }

    @Override
    public void addRole(Role role) {
        System.out.println("添加角色");
    }

    @Override
    public void deleteRole(Role role) {
        System.out.println("删除用户");
    }
}

  符合接口隔离原则的接口:

【设计模式】6.设计模式原则-接口隔离原则

  用户的接口类以及接口实现类:

public interface UserService {
    void addUser(User user);

    void deleteUser(User user);

}

public class UserServiceImpl implements UserService {
    @Override
    public void addUser(User user) {
        System.out.println("添加用户");
    }

    @Override
    public void deleteUser(User user) {
        System.out.println("删除用户");
    }
}

  角色的接口类以及接口实现类:

public interface RoleService {

    void addRole(Role role);

    void deleteRole(Role role);
}

public class RoleServiceImpl implements RoleService {
    @Override
    public void addRole(Role role) {
        System.out.println("添加角色");
    }

    @Override
    public void deleteRole(Role role) {
        System.out.println("删除用户");
    }
}

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/158108.html

(0)
飞熊的头像飞熊bm

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!