前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >【设计模式】之接口设计分离原则

【设计模式】之接口设计分离原则

作者头像
青山师
发布2023-05-05 19:03:41
750
发布2023-05-05 19:03:41
举报

接口分离设计原则

接口分离设计原则主要是为了解决接口臃肿的缺陷。 接口如果包含不是特定于它的方法就称为污染的或者臃肿的接口。

客户端不应该被强制依赖它们本不需要使用的接口。。

我们以施乐公司开发的一款多功能机器为例。这个超级施乐公司系统可以处理广泛的作业例如 打印、扫描、装订和复印等功能。 它们可以作为像 IMachine 接口一样实现如下所示:

IMachine.java
代码语言:javascript
复制
package org.byron4j.cookbook.designpattern.segregation;

/**
 * 施乐公司系统机器接口
 */
public interface IMachine {
    /**
     * 打印
     */
    public void print();

    /**
     * 装订
     */
    public void staple();

    /**
     * 扫描
     */
    public void scan();

    /**
     * 复印
     */
    public void photoCopy();
}
XeroxMachine.java
代码语言:javascript
复制
package org.byron4j.cookbook.designpattern.segregation;

public class XeroxMachine implements  IMachine {
    @Override
    public void print() {
        System.out.println("打印任务...");
    }

    @Override
    public void staple() {
        System.out.println("装订任务...");
    }

    @Override
    public void scan() {
        System.out.println("扫描任务...");
    }

    @Override
    public void photoCopy() {
        System.out.println("复印任务...");
    }
}

这个超级机器被生产出来了并且工作得很好。现在该公司有了一个新的市场需求,生产一种机器仅仅只要有打印功能即可。 管理部门决定开发一个定制的打印机。现在开发同事想编写一个 Print 类实现 IMachine 接口。 你注意到这个问题了吗?尽管你仅仅需要打印功能,但你却不得不去实现 IMachine 接口。 现在, IMachine 接口不再遵循接口分离原则了,开始变成了 “臃肿”的接口。

为了避免 IMachine 接口成为一个违背分离原则而成为臃肿的接口,我们可以将 IMachine 接口分散成多个特定的接口。

代码语言:javascript
复制
public interface IPrinter {
	public void print();
}

public interface IScanner {
	public void fax();
}

public interface IStapler {
	public void staple();
}

public interface IPhotoCopier {
	public void photoCopy();
}

注意事项

如果你正在处理一个遗留的应用程序,存在“臃肿的接口”,你会如何处理呢? 你可以使用 适配器模式 去分离接口。

接口分离原则使实现变得简单,方便调试和继续维护。

接口分离原则很容易理解,在理论上也是比较友好的,但是很难识别不同的接口,往往以接口的增殖而告终。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018-11-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 接口分离设计原则
    • IMachine.java
      • XeroxMachine.java
        • 注意事项
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档