设计模式-设计原则之单一职责原则(Single Responsibility Principle)

定义
就一个类而言,应该仅有一个引起它变化的原因。简单来说,一个类中应该是一组相关性很高的函数、数据的封装。
在这里插入图片描述
类职责

代码

public class Bird {
    public void mainMoveMode(String birdName) {
        System.out.println(birdName + "用翅膀飞");
    }
}

测试

public class Test {
    public static void main(String[] args) {
        Bird bird = new Bird();
        bird.mainMoveMode("大雁");
        bird.mainMoveMode("鸵鸟");
    }
}

在这里插入图片描述
显然这里鸵鸟用翅膀飞是不符合事实的,那么在现有代码上修改一下Bird

public class Bird {
    public void mainMoveMode(String birdName) {
        if ("鸵鸟".equals(birdName)) {
            System.out.println(birdName + "用脚走");
        } else {
            System.out.println(birdName + "用翅膀飞");
        }
    }
}

这样的代码显然是不符合单一职责原则的,每种鸟类均需要在mainMoveMode中添加很多很多的if...else

合理代码

public class FlyBird {
    public void mainMoveMode(String birdName) {
        System.out.println(birdName + "用翅膀飞");
    }
}
public class WalkBird {
    public void mainMoveMode(String birdName) {
        System.out.println(birdName + "用脚走");
    }
}

测试

public class Test {
    public static void main(String[] args) {
        FlyBird flyBird = new FlyBird();
        flyBird.mainMoveMode("大雁");
        WalkBird walkBird = new WalkBird();
        walkBird.mainMoveMode("鸵鸟");
    }
}

在这里插入图片描述
接口职责

public interface ICourse {
    String getCourseName();//获取课程名称

    byte[] getCourseVideo();//获取课程的字节流
    //----------------------------------------
    void studyCourse();//学习课程

    void refundCourse();//退订课程
}

上面的代码表达的是,如果学习了一门课,那么我们就可以获取这门课的课程名称和课程的视频流,但是退订这门课后我们是获取不了课程名称和课程的视频流的,那么我们需要做的是将上面的代码划分为获取课程信息课程管理两种职责

public interface ICourseContent {
    String getCourseName();//获取课程名称

    byte[] getCourseVideo();//获取课程的字节流
}
public interface ICourseManager {
    void studyCourse();//学习课程

    void refundCourse();//退订课程
}
public class CourseImpl implements ICourseContent, ICourseManager {
    public String getCourseName() {
        return null;
    }

    public byte[] getCourseVideo() {
        return new byte[0];
    }

    public void studyCourse() {
        //TODO 学习课程
    }

    public void refundCourse() {
        //TODO 退订课程
    }
}

在这里插入图片描述
这样我们代码的复杂性降低了,可读性变高了,修改一个接口对另一个接口是不影响的

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值