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

接口分离设计原则

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

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

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

IMachine.java

package org.byron4j.cookbook.designpattern.segregation;

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

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

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

    /**
     * 复印
     */
    public void photoCopy();
}


XeroxMachine.java


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 接口分散成多个特定的接口。

public interface IPrinter {
    public void print();
}

public interface IScanner {
    public void fax();
}

public interface IStapler {
    public void staple();
}

public interface IPhotoCopier {
    public void photoCopy();
}

注意事项

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

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

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

你可能感兴趣的:(【设计模式】接口设计原则之分离原则详解)