1    要点讲解

1.1  需要注意

2    代码演练

2.1  类的单一职责原则demo

2.2  接口的单一职责原则demo

2.3  方法的单一职责原则demo

1    要点讲解

1.1  需要注意

1.1.1  实际应用中,类不采用单一职责,接口和方法采用单一职责。
1.1.2  定义:单一职责规定 一个类,接口或者方法,只有一个变化的原因
1.1.3  优点:降低类的复杂性,提高可读性,维护时风险降低
1.1.4  实际应用,受依赖,组合,聚合这些关系影响,同时受控于项目规模,项目周期,技术人员水平,对进度把控等影响。适当的应用单一职责原则。

 

2    代码演练

2.1  类的单一职责原则demo

测试类:

package com.geely.design.principle.singleresponsibility;

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

实体类1:

package com.geely.design.principle.singleresponsibility;

public class WalkBird {
public void birdMove(String birdName){
System.out.println(birdName+"用脚走!");
}
}

实体类2:

package com.geely.design.principle.singleresponsibility;

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

打印日志:

鸵鸟用脚走!
大雁用翅膀飞!

2.2  接口的单一职责原则demo

接口1:

package com.geely.design.principle.singleresponsibility;

/**
* 这个接口和获取内容的接口有先后顺序,只有开始学习,才能获取内容,如果退出学习,就不能在获取内容了,
* 由于职责不同,所以设计两个接口符合单一职责原则
*/
public interface IcourseAction {
void beginStudy();
void quitStudy();
}

接口2:

package com.geely.design.principle.singleresponsibility;

/**
* 注,本接口主要是获取课程的内容
*/
public interface IcourseContent {
String getCourseText();//获取课程文本内容
byte[] getCourseVideo();//获取课程的视频
}

实体类:

package com.geely.design.principle.singleresponsibility;

public class Course implements IcourseAction,IcourseContent{
@Override
public void beginStudy() { } @Override
public void quitStudy() { } @Override
public String getCourseText() {
return null;
} @Override
public byte[] getCourseVideo() {
return new byte[0];
}
}

2.3  方法的单一职责原则demo

demo:

package com.geely.design.principle.singleresponsibility;

public class Method {
/**
* 正确,单一职责原则,修改用户的名称
* @return
*/
public String updateUserName(){
return "";
} /**
* 正确,单一职责原则,修改用户的密码
* @return
*/
public String updateUserPassWord(){
return "";
} /**
* 错误,作为对比
* @return
*/
public String updateUserInfo(String userId,String gender){
return " ";
}
/**
* 错误,作为对比
* @param userId
* @return
*/
public String updateUserInfo2(String userId){
return " ";
}
}

最新文章

  1. IntelliJ IDEA 教程设置讲解
  2. Eclipse中怎么安装TestNG单元测试框架
  3. .NET 集合类型性能分析
  4. YTU 2345: 后序遍历二叉树
  5. mysql字段不能为空的字段为空时也能插入的方法
  6. [Bhatia.Matrix Analysis.Solutions to Exercises and Problems]ExI.4.6
  7. 实用bootstrap 表格控件
  8. mysql中DES加密解密
  9. A/C模式 是什么意思啊汽车知识问题_PCauto快问
  10. css实现隐藏多余溢出文字并显示省略号
  11. 解析xml,返回第一级元素键值对。如果第一级元素有子节点,则此节点的值是子节点的xml数据。
  12. 带你一文了解Python中的运算符
  13. tornado.gen.coroutine-协程
  14. Alpha代码规范、冲刺任务与计划
  15. Alpha版本 - 展示博客
  16. JQuery中的工具类(五)
  17. 抽屉之Tornado实战(4)--发帖及上传图片
  18. Java学习笔记整理第一章 java基本数据类型、修饰符、运算符
  19. MongoDB学习3 $操作符表达式大全及实例
  20. 解决Python爬虫使用requests包控制台输出乱码问题

热门文章

  1. bugku web4
  2. 【StarUML】组件图
  3. 1012 The Best Rank
  4. c++调用自己编写的静态库(通过eclipse)
  5. linux使用tree将目录结构写进txt
  6. Nexus坑人系列-interface Unknown state L3 Not Ready
  7. label 阻止冒泡 防止点击label 触发2次事件
  8. vue使用过程中遇到的细节问题
  9. mysql区分大小写问题
  10. word中如何删除一张空白表格