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

2023-05-05 19:03:41 浏览数 (2)

接口分离设计原则

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

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

我们以施乐公司开发的一款多功能机器为例。这个超级施乐公司系统可以处理广泛的作业例如 打印、扫描、装订和复印等功能。 它们可以作为像 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();
}

注意事项

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

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

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

0 人点赞