Java中的开发原则详解:DRY、YAGNI、单一职责
DRY即Don't Repeat Yourself,即不要重复自己。这个原则告诉我们尽量避免重复的代码,将重复的代码抽象成函数或者类,让它们可以在多个地方被调用。
我们来看一个例子:
public void printUserInfo(String name, String age, String gender) { System.out.println("Name: " + name); System.out.println("Age: " + age); System.out.println("Gender: " + gender); } public void printTeacherInfo(String name, String age, String gender, String subject) { System.out.println("Name: " + name); System.out.println("Age: " + age); System.out.println("Gender: " + gender); System.out.println("Subject: " + subject); }
可以发现,在这两个函数中,有大量的重复代码,而且它们的功能非常相似。我们可以将它们抽象成一个通用的函数:
public void printInfo(String name, String age, String gender) { System.out.println("Name: " + name); System.out.println("Age: " + age); System.out.println("Gender: " + gender); } public void printTeacherInfo(String name, String age, String gender, String subject) { printInfo(name, age, gender); System.out.println("Subject: " + subject); }
通过这样的重构,我们可以大大减少代码量,提高代码的可读性和可维护性。
YAGNI即You Ain't Gonna Need It,即你不会需要它。这个原则告诉我们在编写代码时,不要过度设计,不要去实现一些当前不需要的功能。
我们来看一个例子:
public class Calculator { public int add(int a, int b) { // TODO: 实现加法 } public int subtract(int a, int b) { // TODO: 实现减法 } public int multiply(int a, int b) { // TODO: 实现乘法 } public int divide(int a, int b) { // TODO: 实现除法 } public int square(int a) { // TODO: 实现平方 } public int cube(int a) { // TODO: 实现立方 } // ...省略其他方法 }
在这个例子中,我们可以看到Calculator类中有大量的TODO注释,这些注释表示这些方法还没有被实现。但是,实际上,在这个类中,我们只需要实现add、subtract、multiply和divide这四个方法就可以了,其他的方法是没有必要实现的。如果我们过度设计,实现了所有的方法,那么会导致代码冗余,增加代码维护的难度。
单一职责原则即一个类或者函数只负责一件事情。这个原则告诉我们在设计类或者函数时,要尽量将功能拆分成多个小的部分,每个部分只负责一个功能。
我们来看一个例子:
public class UserService { public void register(String username, String password) { // TODO: 实现用户注册 } public void login(String username, String password) { // TODO: 实现用户登录 } public void changePassword(String username, String oldPassword, String newPassword) { // TODO: 实现修改密码 } // ...省略其他方法 }
在这个例子中,UserService类中有三个方法:register、login和changePassword。这三个方法虽然都与用户相关,但是它们的功能并不是非常相似,我们可以将它们拆分成三个独立的类:UserRegisterService、UserLoginService和UserPasswordService。
public class UserRegisterService { public void register(String username, String password) { // TODO: 实现用户注册 } } public class UserLoginService { public void login(String username, String password) { // TODO: 实现用户登录 } } public class UserPasswordService { public void changePassword(String username, String oldPassword, String newPassword) { // TODO: 实现修改密码 } }
通过这样的拆分,我们可以让每个类只负责一个功能,提高代码的可读性和可维护性。
本文为翻滚的胖子原创文章,转载无需和我联系,但请注明来自猿教程iskeys.com