type
status
date
slug
summary
tags
category
icon
password
一、设计模式的规范
设计模式遵循六⼤原则;单⼀职责( ⼀个类和⽅法只做⼀件事 )、⾥⽒替换( 多态,⼦类可扩展⽗类 )、依赖
倒置( 细节依赖抽象,下层依赖上层 )、接⼝隔离( 建⽴单⼀接⼝ )、迪⽶特原则( 最少知道,降低耦合 )、开闭
原则( 抽象架构,扩展实现 ),会在具体的设计模式章节中,进⾏体现。
二、单⼀职责
定义:一个类只有一个发生变化的原因

三、示例
模拟场景:不同等级的用户可以看到不同格式的视频,vip用户可以看到1080p视频,而访客用户只能看480p视频
未有单一职责原则的设计(传统设计):
package com.qf.principle.single.trandition; public class VideoUserService { /** * 缺点:随着用户类型的增多,代码会出现多个else if的判断,代码变得非常的冗余难以维护 * @param userType */ public void serviceGrade(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视频"); } } }
package com.qf.principle.single.trandition; public class ApiTest { public static void main(String[] args) { VideoUserService videoUserService=new VideoUserService(); videoUserService.serviceGrade("VIP用户"); videoUserService.serviceGrade("普通用户"); videoUserService.serviceGrade("访客用户"); } }
总结:违背了开背原则,对扩展开放对修改关闭。随着用户类型的增多,代码会出现多个else if的判断,代码变得非常的冗余难以维护。
单一职责原则设计:
定义接口:
IVideoUserService
,方法:definition
,advertisement
package com.qf.principle.single.design; public interface IVideoUserService { /** * 用户的定义 */ void definition(); /** * 是否需要看广告 */ void advertisement(); }
package com.qf.principle.single.design.impl; import com.qf.principle.single.design.IVideoUserService; /** * 访客用户 */ public class GuestVideoUserService implements IVideoUserService { @Override public void definition() { System.out.println("访客用户 480P视频"); } @Override public void advertisement() { System.out.println("需要看广告"); } }
package com.qf.principle.single.design.impl; import com.qf.principle.single.design.IVideoUserService; /** * 普通用户 */ public class OrdinaryVideoUserService implements IVideoUserService { @Override public void definition() { System.out.println("普通用户 720P视频"); } @Override public void advertisement() { System.out.println("无需看广告"); } }
package com.qf.principle.single.design.impl; import com.qf.principle.single.design.IVideoUserService; /** * vip用户 */ public class VIPVideoUserService implements IVideoUserService { @Override public void definition() { System.out.println("VIP用户 1080P视频"); } @Override public void advertisement() { System.out.println("无需看广告"); } }
package com.qf.principle.single.design; import com.qf.principle.single.design.impl.GuestVideoUserService; import com.qf.principle.single.design.impl.OrdinaryVideoUserService; import com.qf.principle.single.design.impl.VIPVideoUserService; public class ApiTest { public static void main(String[] args) { //vip用户 IVideoUserService vipVideoUser=new VIPVideoUserService(); vipVideoUser.advertisement(); vipVideoUser.definition(); //普通用户 IVideoUserService ordinaryUser=new OrdinaryVideoUserService(); ordinaryUser.advertisement(); ordinaryUser.definition(); //访客用户 IVideoUserService guestUser=new GuestVideoUserService(); guestUser.advertisement(); guestUser.definition(); } }
关系图

总结:利用多态的特性,每新增一个用户类型只需要,多创建一个用户类,去实现接口,这样保证了代码的扩展性和可维护,可读性。
- 作者:程序员小舟
- 链接:https://codezhou.top/article/JAVA%E3%80%90%E8%AE%BE%E8%AE%A1%E6%A8%A1%E5%BC%8F%E3%80%91%E5%8D%95%E4%B8%80%E8%81%8C%E8%B4%A3%E5%8E%9F%E5%88%99
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章