既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!
由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新
本节介绍如何使用单一职责原则解决问题。
例如,在 C语言中文网中,用户分为普通用户和VIP用户。普通用户不能阅读学习收费文章,VIP用户可以任意反复阅读,功能职责不一样。
首先创建用户类 User。
package net.biancheng.c.srp;
public class User {
public void study(String userType) {
if ("common".equals(userType)) {
System.out.println("不能阅读收费文章");
} else {
System.out.println("可以任意反复阅读收费文章");
}
}
}
下面编写客户端测试代码,无论是普通用户还是VIP会员,都调用 study() 方法的逻辑。
public static void main(String[] args) {
User user = new User();
user.study("common");
user.study("vip");
}
从上面代码看,User 类承担了两种处理逻辑。假如现在对用户进行加密,那么普通用户和VIP会员的加密逻辑是不一样的,必须修改代码。而修改代码逻辑势必会相互影响,容易带来不可控的风险。
下面我们对职责进行分离解耦,分别创建 CommonUser 和 VipUser。
CommonUser 类的代码如下。
package net.biancheng.c.srp;
public class CommonUser {
public void study(String userType) {
System.out.println(userType + "不能阅读收费文章");
}
}
VipUser 类的代码如下。
package net.biancheng.c.srp;
public class VipUser {
public void study(String userType) {
System.out.println(userType + "任意阅读收费文章");
}
}
客户端代码如下,将普通会员的处理逻辑调用 CommonUser 类,VIP 会员的处理逻辑调用 VipUser 类。
public static void main(String[] args) {
CommonUser commonUser = new CommonUser();
commonUser.study("common");
VipUser vipUser = new VipUser();
vipUser.study("vip");
}
对于教程方面,我们要对教程做权限。普通学员只能获得教程的基本信息,VIP 用户可以获得阅读权限。所以在控制教程层面,至少有两个职责,我们可以把展示职责和管理职责分离开,都实现同一个抽象依赖。
设计一个顶层接口 Course。
package net.biancheng.c.srp;
public interface Course {
//获取教程的基本信息
String getCourseTitle();
//获得阅读权限
byte[] getReadPow();
//学习教程
void studyCourse();
//退款
void refundCourse();
}
这里可以把 Course 接口拆分成两个接口,创建一个接口 CourseInfo 和 CourseManager。
CourseInfo 接口的代码如下。
package net.biancheng.c.srp;
public interface CourseInfo {
//获取教程的基本信息
String getCourseTitle();
//获得阅读权限
byte[] getReadPow();
}
CourseManager 接口的代码如下。
package net.biancheng.c.srp;
public interface CourseManager {
//学习教程
void studyCourse();
//退款
void refundCourse();
}
类图如下:
下面来看方法层面的单一职责设计。有时候,我们通常会把一个方法写成下面这样。
private void modifyUserInfo(String userName, String url) {
userName = "C语言中文网";
![img](https://img-blog.csdnimg.cn/img_convert/fac091cc7123042b60d0d82ddad1e127.png)
![img](https://img-blog.csdnimg.cn/img_convert/0fb47db05d2a9a5c92b75e01a7ad3cba.png)
![img](https://img-blog.csdnimg.cn/img_convert/09d0353cf27acc79a1887e2cebf9fa11.png)
**既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618658159)**
学习提升的进阶课程,涵盖了95%以上Go语言开发知识点,真正体系化!**
**由于文件比较多,这里只是将部分目录截图出来,全套包含大厂面经、学习笔记、源码讲义、实战项目、大纲路线、讲解视频,并且后续会持续更新**
**[如果你需要这些资料,可以戳这里获取](https://bbs.csdn.net/topics/618658159)**