概述
单一职责原则
- 定义:不要存在多于一个导致类变更的原因
- 一个类/接口/方法只负责一项职责或职能
优点:
- 降低类的复杂度;
- 提高类的可读性,因为类的职能单一,看起来比较有目的性,显得简单;
- 提高系统的可维护性,降低变更程序引起的风险。
缺点:
如果一味追求这个单一职责,有时也会造成类的大爆炸。。。。。。。不过接口和方法应该遵循这个原则。
举个例子啦
1.创建一个Bird类和测试类MainTest
package com.maomao.design.principle.singleresponsibility;
public class Bird {
public void mainMoveMode(String birdName){
System.out.println("用翅膀飞");
}
}
package com.maomao.design.principle.singleresponsibility;
public class MainTest {
public static void main(String[] args) {
Bird bird = new Bird();
bird.mainMoveMode("猫头鹰");
}
}
这样的结果运行如下:
用翅膀飞
2.当mainMoveMode方法中传入其它鸟类的时候,如驼鸟,说它用翅膀飞就不合适了,那么直接在Bird类中修改代码是最快的,但是,这样违反原则呀!而且风险也很大。
package com.maomao.design.principle.singleresponsibility;
public class Bird {
public void mainMoveMode(String birdName){
if(birdName.equals("驼鸟")){
System.out.println("用脚走路");
}
else {
System.out.println("用翅膀飞");
}
}
}
在MainTest中
package com.maomao.design.principle.singleresponsibility;
public class MainTest {
public static void main(String[] args) {
Bird bird = new Bird();
bird.mainMoveMode("猫头鹰");
bird.mainMoveMode("驼鸟");
}
}
结果:
用翅膀飞
用脚走路
- 为了体现自己编码遵行一颗有原则的心,将代码进一步演进。分别创建两个类FlyBird和WalkBird 分别继承Bird
package com.maomao.design.principle.singleresponsibility;
public class FlyBird extends Bird{
@Override
public void mainMoveMode(String birdName) {
System.out.println("用翅膀飞的鸟");
}
}
package com.maomao.design.principle.singleresponsibility;
public class WalkBird extends Bird {
@Override
public void mainMoveMode(String birdName) {
System.out.println("用脚走路的鸟");
}
}
public class MainTest {
public static void main(String[] args) {
FlyBird flyBird = new FlyBird();
flyBird.mainMoveMode("猫头鹰");
WalkBird walkBird = new WalkBird();
walkBird.mainMoveMode("驼鸟");
}
}
结果:
用翅膀飞的鸟
用脚走路的鸟
再举个例子
创建一个接口ICourse
package com.maomao.design.principle.singleresponsibility;
public interface ICourse {
// 获取课程信息
public String courseName(); // 获取Course的name的方法
byte [] courseVideo(); // 获取视频流的方法
//管理课程信息
void studyCourse(); // 学习课程的方法
void refundCourse(); // 退掉课程
} ***因为退掉这种可能会影响到无法获取课程信息,所以可以将这个接口拆分成两个接口***
package com.maomao.design.principle.singleresponsibility;
public interface ICourseManager {
void studyCourse();
void refundCourse();
}
package com.maomao.design.principle.singleresponsibility;
public interface ICourseContent {
public String courseName();
byte [] courseVideo();
}
package com.maomao.design.principle.singleresponsibility;
public class CourseIml implements ICourseContent,ICourseManager {
@Override
public String courseName() {
return null;
}
@Override
public byte[] courseVideo() {
return new byte[0];
}
@Override
public void studyCourse() {
}
@Override
public void refundCourse() {
}
} 这就是接口方面的单一职责
最后举一个方法的单一职责
public class Method {
private void updateUserInfo(String userName,String address){
userName = "maomao";
address = "beijing";
}
private void updateUserInfo(String userName,String... properties){
userName = "maomao";
// address = "beijing";
}
private void updateUsername(String userName){
userName = "maomao";
}
private void updateUserAddress(String address){
address = "ShenZhen";
}
private void updateUserInfo(String userName,String address,boolean bool){
if(bool){
//todo something1
}else{
//todo something2
}
userName = "maomao";
address = "ShenZhen";
}
}
最后
以上就是爱笑鱼为你收集整理的软件设计七大原则之三--单一职责原则的全部内容,希望文章能够帮你解决软件设计七大原则之三--单一职责原则所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复