提出问题

如何写出规范合理的类???

解决问题

在实际的工作中很多开发人员往往不会思考这么多,他们只想着让代码可以工作就可以了,所以经常出现几千行的大类。因此写出一些有符合规范的类是有必要的。下面是来自《代码整洁之道》中自己的几点总结:

1、类的组织:自顶向下原则,变量列表(公共先于私有,静态先于实体),方法列表,私有工具方法紧跟在公共方法之后;

  1. package com.hwy.test;
  2. import org.slf4j.Logger;
  3. import org.slf4j.LoggerFactory;
  4. public class CodeCleanTest {
  5. /**下面是公共静态常量(公共优先私有) **/
  6. public static final String BOY = "男孩";
  7. public static final String GIRL = "女孩";
  8. /** 下面是私有静态常量(公共优先私有) **/
  9. private static int kissTimes = 0;
  10. /** 静态先于实体 **/
  11. private Logger log = LoggerFactory.getLogger(this.getClass());
  12. public void eat(){
  13. System.out.println("吃饭");
  14. datWithGirl();
  15. }
  16. public void datWithGirl(){
  17. learnToLove();
  18. System.out.println("和女孩约会!");
  19. }
  20. /** 私有工具方法紧跟在公共方法之后 **/
  21. private void learnToLove(){
  22. System.out.println("学习如何恋爱!");
  23. }
  24. }

2、类应该短小:类也应该要尽可能的短小,但和函数不同不是以代码行数来权衡。而是以职责;类的名称应该描述其权责,类名不应该包含模糊的词(如Processor,Manager或Super等),类名越明确,类的职责就越清晰;

3.单一权责原则,只有一个修改它的原因,并与少量的其他类协同完成工作;

4.内聚:类中含有最少的变量,且每个方法都使用每个变量,此时内聚度最高,类应该是内聚高的;

例:修改上面的类,如下,该类中,每个方法都尽量操作类中一个或多个变量

package com.hwy.test;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class CodeCleanTest {

    /**下面是公共静态常量(公共优先私有) **/
    public static final String BOY = "男孩";
    public static final String GIRL = "女孩";

    /** 下面是私有静态常量(公共优先私有) **/
    private static int kissTimes = 0;

    /** 静态先于实体 **/
    private Logger log = LoggerFactory.getLogger(this.getClass());

    /** 该方法使用了BOY log这些变量 **/
    public void eat(){
        System.out.println(BOY + "吃饭");
        datWithGirl();
        log.info("吃完了!");
    }

    /** 该方法使用了BOY GIRL KissTimes 和log这些变量 **/
    public void datWithGirl(){
        learnToLove();
        System.out.println(BOY + "和" + GIRL + "约会!");
        kissTimes = kissTimes++;
        log.info("约会成功!");
    }

    /** 私有工具方法紧跟在公共方法之后 **/
    /** 该方法使用了BOY log这些变量 **/
    private void learnToLove(){
        System.out.println(this.BOY + "学习如何恋爱!");
        log.info("学习成功!");
    }

}

5)开发闭合原则(OCP):类应该对扩展开发,对修改封闭

6)隔离修改:具体类实现细节,抽象类只呈现概念,利用接口和抽象类可以隔离因为细节的改变而带来的改变类的风险;