栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

开发原则之单一原则

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

开发原则之单一原则

单一原则

Single responsibility

一个类或模块应仅有一个引起其变化的因素(职责)

一个方法只做一件事

首先看一个计算质数的例子:

   
    public long countPrimes(int max){
        long total = 0;
        for (int i = 2; i <= max ; i++) {
            boolean isPrime = true;
            for (int j = 2; j < i ; j++) {
                if (i % j == 0){
                    isPrime = false;
                    break;
                }
            }
            if (isPrime){
                System.out.println(i);
                total++;
            }
        }
        return total;
    }

这个方法中做了两件事,1. 判断是否是质数, 2. 计数

现在把这个方法中判断是否是质数提取出来

   
    public long countPrimes2(int max){
        long total = 0;
        for (int i = 2; i <= max ; i++) {
            boolean isPrime = isPrime(i);
            if (isPrime){
                System.out.println(i);
                total++;
            }
        }
        return total;
    }


   
    private boolean isPrime(int i) {
        boolean isPrime = true;
        for (int j = 2; j < i; j++) {
            if (i % j == 0) {
                isPrime = false;
                break;
            }
        }
        return isPrime;
    }

这样每个方法只做一件事.但是在java8之后用流代替循环操作.

如果需要对一个很大的数计数,可以并行操作。线程模型也是代码的职责之一!

   
    public long countPrimes3(int max){
        return IntStream.range(2, max)
                .peek(System.out::println)
                .filter(this::isPrime8)
                .count();
    }

    private boolean isPrime8(int num){
        boolean flag = IntStream.range(2, num)
                .anyMatch(j -> num % j == 0);
        return !flag;
    }

这里注意和上面稍微有点不一样的,IntStream.range(2, max)包含下界不包含上届

例如:

IntStream.range(2,6)
         .forEach(System.out::println);
// 只会输出
2
3
4
5

range()方法不会输出最大的数
参考<>

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/439577.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号