登录
首页 >  文章 >  java教程

接口隔离原则

来源:dev.to

时间:2024-08-27 21:09:51 332浏览 收藏

怎么入门文章编程?需要学习哪些知识点?这是新手们刚接触编程时常见的问题;下面golang学习网就来给大家整理分享一些知识点,希望能够给初学者一些帮助。本篇文章就来介绍《接口隔离原则》,涉及到,有需要的可以收藏一下

接口隔离原则

任何客户端都不应该被迫依赖它不使用的方法

考虑办公空间的示例,其中使用对象表示各种输出设备

接口隔离原则之前

i多功能接口

/**
 * @imultifunction interface has methods related to all output devices present in office space
 * for devices like printer, scanner, fax machines, etc
*/
public interface imultifunction {
    public void print();
    public void getprintspooldetails();
    public void scan();
    public void scanphoto();
    public void fax();
    public void internetfax();
}

现在为各种设备实现上述通用接口

具有所有功能的 xeroxworkcenter 类

/**
 * 
 * you must have seen xerox work station device which has all the features in one like printing, scanning, xerox,
 * fax etc
*/
public class xeroxworkcenter implements imultifunction {

    @override
    public void print() {
        // real printing code
    }

    @override
    public void getprintspooldetails() {
        // real get print spool details code
    }

    @override
    public void scan() {
        // read scanning code
    }

    @override
    public void scanphoto() {
        // real scan photo code 
    }

    @override
    public void fax() {
        // real fax code
    }

    @override
    public void internetfax() {
        // real internet fax code
    }

}

hpprinternscanner 类具有打印和扫描功能

public class hpprinternscanner implements imultifunction {

    @override
    public void print() {
        // real printing code
    }

    @override
    public void getprintspooldetails() {
        // real get print spool details code
    }

    @override
    public void scan() {
        // read scanning code
    }

    @override
    public void scanphoto() {
        // real scan photo code 
    }

    //since hpprinternscanner has only printing and scanning abilities fax() and internetfax() will have empty body
    @override
    public void fax() {}

    @override
    public void internetfax() {}

}

canonprinter 类只有打印功能

public class canonprinter implements imultifunction {

    @override
    public void print() {
        // real printing code
    }

    @override
    public void getprintspooldetails() {
        // real get print spool details code
    }

    //since the canonprinter has only printing ability rest of the method will have an empty body
    @override
    public void scan() {}

    @override
    public void scanphoto() {}

    @override
    public void fax() {}

    @override
    public void internetfax() {}

}

isp违规识别技巧

  • 胖接口(具有两个多方法声明的接口)
  • 低内聚的接口(具有不太可能彼此相关的方法的接口)
  • *空方法实现*(当类被迫实现他们不使用的方法时,他们将方法的实现留空)

接口隔离原则之后:

public interface iprint {
    public void print();
    public void getprintspooldetails();
}
public interface iscan {
    public void scan();
    public void scanphoto();
}
public interface ifax {
    public void fax();
    public void internetfax();
}
/**
 * 
 * you must have seen the xerox workstation device which has all the features in one like printing, scanning, xerox, fax, etc.
*/
public class xeroxworkcenter implements iprint,iscan,ifax {

    @override
    public void print() {
        // real printing code
    }

    @override
    public void getprintspooldetails() {
        // real get print spool details code
    }

    @override
    public void scan() {
        // read scanning code
    }

    @override
    public void scanphoto() {
        // real scan photo code ̰
    }

    @override
    public void fax() {
        // real fax code
    }

    @override
    public void internetfax() {
        // real internet fax code
    }

}
public class hpprinternscanner implements iprint,iscan {

    @override
    public void print() {
        // real printing code
    }

    @override
    public void getprintspooldetails() {
        // real get print spool details code
    }

    @override
    public void scan() {
        // read scanning code
    }

    @override
    public void scanphoto() {
        // real scan photo code 
    }
}
public class CanonPrinter implements IPrint {

    @Override
    public void print() {
        // real printing code
    }

    @Override
    public void getPrintSpoolDetails() {
        // real get print spool details code
    } 
}

每个接口都有一个单一的职责,并且现在更加干净。

isp 与其他 solid 原则的关系

单一责任
将接口划分为不同的接口后,现在所有接口(例如 iprint、iscan)都有单一职责

里氏替换
由于隔离,现在所有类(实现接口)都遵循里氏替换,因为所有子类型或实现类都可以用它们的接口引用变量替换

好了,本文到此结束,带大家了解了《接口隔离原则》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多文章知识!

声明:本文转载于:dev.to 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>