前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >面向对象的7种设计原则(1)-单一职责原则

面向对象的7种设计原则(1)-单一职责原则

作者头像
一觉睡到小时候
修改2020-08-22 10:55:55
3570
修改2020-08-22 10:55:55
举报
文章被收录于专栏:国产程序员国产程序员

永远不要让一个类存在多个改变的理由。

单一原则表明,如果你有多个原因去改变一个类,那么应该把这些引起变化的原因分离开,把这个类分成多个类,每个类只负责处理一种改变。当你做出某种改变时,只需要修改负责处理该改变的类。当我们去改变一个具有多个职责的类时可能会影响该类的其他功能

单一职责原则代表了设计应用程序时一种很好的识别类的方式,并且它提醒你思考一个类的所有演化方式。只有对应用程序的工作方式有了很好的理解,才能很好的分离职责。

单一职责原则原则的核心含意是:只能让一个类/接口/方法有且仅有一个职责。

案例:

代码语言:javascript
复制
public class Animal {
    public void run(String animal){
        System.out.println(animal+"running on the land...");
    }
     public static void main(String[] args) {
        Animal animal = new Animal();
        animal.run("狗");
        animal.run("牛");
        animal.run("马");
    }
}

运行结果:

代码语言:javascript
复制
狗running on the land...
牛running on the land...
马running on the land...

然而并不是所有的动物都在陆地上奔跑,鸟在天上飞,鱼在水中游。这时的Animal类就不符合单一职责,需要将Animal进行细分。

第一种:

代码语言:javascript
复制
    class Aquatic{
        public void run(String animal){
            System.out.println(animal+"swimming in the water...");
        }
    }

    class Terrestrial{
        public void run(String animal){
            System.out.println(animal+"running on the land...");
        }
    }

    class Birds{
        public void run(String animal){
            System.out.println(animal+"flying in the sky...");
        }
    }

第二种:

这种修改方式直接在代码级别上违背了单一职责原则,虽然修改起来最简单,但隐患却是最大的。

代码语言:javascript
复制
public class Animal {

    public void run(String animal){
        if("fish".equals(animal)){
            System.out.println(animal+"swimming in the water...");
        }else if("bird".equals(animal)){
            System.out.println(animal+"flying in the sky...");
        }else{
            System.out.println(animal+"running on land...");
        }
    }
}

第三种:

这种修改方式没有改动原来的方法,而是在类中新加了一个方法,这样虽然也违背了单一职责原则,但在方法级别上却是符合单一职责原则的,因为它并没有动原来方法的代码。

代码语言:javascript
复制
public class Animal {

    public void run1(String animal){
            System.out.println(animal+"running on land...");
    }

    public void run2(String animal){
        System.out.println(animal+"flying in the sky...");
    }

    public void run3(String animal){
        System.out.println(animal+"swimming in the water...");
    }
}

单一职责原则虽然它是最简单但又最难运用的原则,需要设计人员发现类的不同职责并将其分离,而发现类的多重职责需要设计人员具有较强的分析设计能力和相关实践经验。

个人博客

简书

掘金

CSDN

OSCHINA

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2020-07-08,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 国产程序员 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档