重构36计(19-24)
第十九计:避免类的臃肿
在我接触过的大部分项目中,总会有一个“大胖子“类特别惹眼,一般来说,这“大胖子“实际上是整个系统的核心类之一,之所以“胖“,主要原因是很多人都会把自己需要的函数加到这个类中,却没有人主动请缨来为它“减肥“。可以通过以下几种方式来为它“瘦身”:
1、按照某种特性(如功能、类型等)将这个类拆分成多个类。
2、合并冗余函数,保持函数粒度的最小化。
3、去除重复代码。
如果实在不能再“瘦”了,那就通过实现相应的接口,让它“看上去很瘦“,举个例子:
public class BigBoy{ public void foo1(); public void foo2(); public void foo3(); public void foo4(); public void foo5(); public void foo6(); public void foo7(); public void foo8(); public void foo9(); // 还有很多...}public interface LittleBoy{ public void foo1(); public void foo2(); public void foo3();}public class BigBoy implements LittleBoy{ public LittleBoy asLittleBoy{) return this; } public void foo1(); public void foo2(); public void foo3(); public void foo4(); public void foo5(); public void foo6(); public void foo7(); public void foo8(); public void foo9(); // 还有很多...}for(;value>10;){ ...}if(userName!=null && userName.equals(name) && (userState != INACTIVE || userState != DELETE) && userPassword!=null && userPassword.equals(password) && (userGroup == "Manager" || userGroup == "Root")){ ...} boolean isUserNameValid = userName!=null && userName.equals(name); boolean isUserActive = userState != INACTIVE || userState != DELETE; boolean isUserPasswordCorrect = userPassword!=null && userPassword.equals(password); boolean isUserHasAuth = userGroup == "Manager" || userGroup == "Root"; if(isUserNameValid && isUserActive && isUserPasswordCorrect && isUserHasAuth){ ... }