- 提出问题
- 解决问题
- 1、类的组织:自顶向下原则,变量列表(公共先于私有,静态先于实体),方法列表,私有工具方法紧跟在公共方法之后;
- 2、类应该短小:类也应该要尽可能的短小,但和函数不同不是以代码行数来权衡。而是以职责;类的名称应该描述其权责,类名不应该包含模糊的词(如Processor,Manager或Super等),类名越明确,类的职责就越清晰;
- 3.单一权责原则,只有一个修改它的原因,并与少量的其他类协同完成工作;
- 4.内聚:类中含有最少的变量,且每个方法都使用每个变量,此时内聚度最高,类应该是内聚高的;
- 5)开发闭合原则(OCP):类应该对扩展开发,对修改封闭
- 6)隔离修改:具体类实现细节,抽象类只呈现概念,利用接口和抽象类可以隔离因为细节的改变而带来的改变类的风险;
提出问题
如何写出规范合理的类???
解决问题
在实际的工作中很多开发人员往往不会思考这么多,他们只想着让代码可以工作就可以了,所以经常出现几千行的大类。因此写出一些有符合规范的类是有必要的。下面是来自《代码整洁之道》中自己的几点总结:
1、类的组织:自顶向下原则,变量列表(公共先于私有,静态先于实体),方法列表,私有工具方法紧跟在公共方法之后;
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());
public void eat(){
System.out.println("吃饭");
datWithGirl();
}
public void datWithGirl(){
learnToLove();
System.out.println("和女孩约会!");
}
/** 私有工具方法紧跟在公共方法之后 **/
private void learnToLove(){
System.out.println("学习如何恋爱!");
}
}
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("学习成功!");
}
}