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 " "; } }