Java设计模式(01) --单一职责原则

设计模式概述

1)设计模式种类

创建型模式:提供创建对象的机制,提升已有代码的灵活性和可复用性。

结构型模式:介绍如何将对象和类组装成较大的结构,并同时保持结构的灵活和高效。

行为模式:负责对象间的高效沟通和职责传递委派。

2)六大设计原则

2.1)单一职责原则定义:约定一个类应该有且仅有一个改变类的原因;

示例:当在各类视频网站看电影、电视剧时,网站针对不同的用户类型,会在用户观看时给出不同的服务反馈,如以下三种:访客用户、普通会员、VIP 会员。

违背原则方案:根据不同的用户类型,判断用户可以观看视频的类型

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高清");
        }
    }

}

如果面对频繁迭代的业务需求,这样的代码结构就很难支撑系统迭代,每一次需求的实现都可能会影响其他逻辑,给整个接口服务带来不可控的风险。

单一职责原则改善代码:

为了满足这样不断迭代的需求,就不能使用一个类把所有职责行为混为一谈,而是需要提供一个上层的接口类,对不同的差异化用户给出单独的实现类,拆分各自的职责边界,定义接口

public interface IVideoUserService {

    // 视频清晰级别;480P、720P、1080P
    void definition();

    // 广告播放方式;无广告、有广告
    void advertisement();

}

访客用户实现类,只能观看480P高清视频,同时需要观看广告

public class GuestVideoUserService implements IVideoUserService {

    public void definition() {
        System.out.println("访客用户,视频480P高清");
    }

    public void advertisement() {
        System.out.println("访客用户,视频有广告");
    }

}

普通会员实现类,可以观看720P超清视频,另外也需要观看广告

public class OrdinaryVideoUserService implements IVideoUserService {

    public void definition() {
        System.out.println("普通用户,视频720P超清");
    }

    public void advertisement() {
        System.out.println("普通用户,视频有广告");
    }

}

VIP会员实现类。可以观看更高清的视频,同时不需要观看广告

public class VipVideoUserService implements IVideoUserService {

    public void definition() {
        System.out.println("VIP用户,视频1080P蓝光");
    }

    public void advertisement() {
        System.out.println("VIP用户,视频无广告");
    }

}

单元测试

public class ApiTest {
    @Test
    public void test_VideoUserService() {
        IVideoUserService guest = new GuestVideoUserService();
        guest.definition();
        guest.advertisement();

        IVideoUserService ordinary = new OrdinaryVideoUserService();
        ordinary.definition();
        ordinary.advertisement();

        IVideoUserService vip = new VipVideoUserService();
        vip.definition();
        vip.advertisement();
    }
}

结构如下:

通过利用单一职责原则的代码优化后,现在每个类都只负责自己的用户行为。后续无论扩展新的功能还是需要在某个时刻修改某个用户行为类,都可以非常方便地开发和维护。

在项目开发的过程中,尽可能保证接口的定义、类的实现以及方法开发保持单一职责,对项目后期的迭代和维护会有很大的帮助。

内容来源 ---《重学Java设计模式》

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值