设计模式原则
设计模式示例代码库地址:
https://gitee.com/Jasonpupil/designPatterns
单一职责原则(SPS):
- 又称单一功能原则,面向对象五个基本原则(SOLID)之一
- 原则定义:一个类应该只有一个发生变化的原因
- 使用
if else
进行判断实现不好维护
模式场景:视频网站
- 存在
访客用户(视频480p高清,并有广告)
、普通用户(视频720p超清,并有广告)
和VIP用户(视频1080p蓝光,没有广告)
if else
处理方式示例代码:
视频用户服务类:
/**
* @Description: 视频用户服务
* @Author: pupil
* @Date: 2024/06/21 下午 8:12
*/
public class VideoUserService {public void serveGrade(String userType){if ("VIP用户".equals(userType)){System.out.println("VIP用户,视频1080p蓝光");}else if ("普通用户".equals(userType)){System.out.println("普通用户,视频720p超清");}else if ("访客用户".equals(userType)){System.out.println("访客用户,视频480p高清");}}
}
测试类:
/*** @description:测试验证* @author: pupil* @data: 2024/06/21 下午 7:57*/
public class ApiTest {public static void main(String[] args) {VideoUserService service = new VideoUserService();service.serveGrade("VIP用户");service.serveGrade("普通用户");service.serveGrade("访客用户");}
}
结果:
根据单一职责原则
处理方式示例代码:
视频用户服务接口:
/**
* @Description: 视频用户服务接口
* @Author: pupil
* @Date: 2024/06/21 下午 8:17
*/
public interface IVideoUserService {void definition();void advertisement();
}
访客用户类:
/*** @Description: 访客用户* @Author: pupil* @Date: 2024/06/21 下午 8:18*/
public class GuestVideoUserServiceImpl implements IVideoUserService {@Overridepublic void definition() {System.out.println("访客用户,视频480p超清");}@Overridepublic void advertisement() {System.out.println("访客用户,视频有广告");}
}
普通用户类:
/*** @Description: 普通用户* @Author: pupil* @Date: 2024/06/21 下午 8:19*/
public class OrdinaryVideoUserServiceImpl implements IVideoUserService {@Overridepublic void definition() {System.out.println("普通用户,视频720p超清");}@Overridepublic void advertisement() {System.out.println("普通用户,视频有广告");}
}
VIP用户:
/*** @Description: VIP用户* @Author: pupil* @Date: 2024/06/21 下午 8:20*/
public class VipVideoUserServiceImpl implements IVideoUserService {@Overridepublic void definition() {System.out.println("VIP用户,视频1080p蓝光");}@Overridepublic void advertisement() {System.out.println("VIP会员,视频无广告");}
}
测试类:
/*** @Description: 测试验证* @Author: pupil* @Date: 2024/06/21 下午 8:24*/
public class ApiTest {public static void main(String[] args) {IVideoUserService guest = new GuestVideoUserServiceImpl();guest.definition();guest.advertisement();System.out.println("=================================");IVideoUserService ordinary= new OrdinaryVideoUserServiceImpl();ordinary.definition();ordinary.advertisement();System.out.println("=================================");IVideoUserService vip = new VipVideoUserServiceImpl();vip.definition();vip.advertisement();}
}
结果:
根据单一职责原则的示例类图:
接口和类是实现关系