搞定单一职责的设计模式一篇文章就够了!!!
Posted 南淮北安
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了搞定单一职责的设计模式一篇文章就够了!!!相关的知识,希望对你有一定的参考价值。
一、定义
单一职责:单一功能,规定一个类只能有一个发生变化的原因
如果要开发的功能需求,不是一次性,会随着业务的发展不断更新变化,也就是一个 Class类负责超过一个以上的职责时,会出现难以维护,扩展等各种问题
二、示例
比如视频网站中有:
- 匿名访客:匿名登录
- 普通用户:实名登录
- 付费会员:付费用户
简单功能的实现:
class VideoUserService{
public void severGrade(String userType){
if ("访客".equals(userType)){
System.out.println("访客用户。。。。");
}else if ("用户".equals(userType)){
System.out.println("用户。。。。。。");
}else {
System.out.println("VIP 用户。。。。");
}
}
}
此时,业务功能逻辑中,一个类包含着多个不同的行为,具有多种用户职责。
此时如果在这个类中继续扩展功能或者添加逻辑,会显得非常臃肿
具体的使用:
public void test_serveGrqde(){
VideoUserService videoUserService = new VideoUserService();
videoUserService.severGrade("匿名访客");
videoUserService.severGrade("普通用户");
videoUserService.severGrade("付费会员");
}
此时,每一个需求变更都会影响其他的逻辑
单一职责设计:
针对不同的用户,分别提供实现类
此时,需要使用提供一个上层的接口类,对不同的差异化用户给出单独的实现类,拆分各自的职责边界
定义接口:
public interface IVideoUserService{
// 视频清晰级别:480P/720P/1080P
void definition();
// 广告播放方式:有广告/无广告
void adverisement();
}
不同用户实现接口,分别定义自己的职责
匿名访客:
public class GuestVideoUserService implements IVideoUserService {
public void definition() {
System.out.println("匿名访客。。。。。。");
}
public void adverisement() {
System.out.println("匿名访客。。。。。。");
}
}
普通用户:
public class OrdinaryVideoUserService implements IVideoUserService {
public void definition() {
System.out.println("普通用户。。。。。。");
}
public void adverisement() {
System.out.println("普通用户。。。。。。");
}
}
付费会员:
public class VipVideoUserService implements IVideoUserService {
public void definition() {
System.out.println("付费会员。。。。。。");
}
public void adverisement() {
System.out.println("付费会员。。。。。。");
}
}
具体的使用:
public void test_serveGrqde() {
//访客用户
IVideoUserService guest = new GuestVideoUserService();
guest.definition();
guest.adverisement();
//普遍用户
IVideoUserService ordinry = new OrdinaryVideoUserService ();
ordinry.definition();
ordinry.adverisement();
//访客用户
IVideoUserService vip = new VipVideoUserService ();
vip.definition();
vip.adverisement();
}
此时,每个类都只负责自己的用户行为,后续的扩展便于维护
项目开发的过程,需要保证接口的定义,类的实现以及方法开发保证单一原则,便于项目后期的迭代
以上是关于搞定单一职责的设计模式一篇文章就够了!!!的主要内容,如果未能解决你的问题,请参考以下文章