重构36计(13-18)
第十三计:为集合类型的成员变量提供增删改查函数
对于集合类型的成员变量,直接提供一个函数将其暴露出去是不够妥当的,缺点包括以下几点:
1、添加集合元素时无法校验它的合法性,例如类型是否符合要求、该元素是否已存在等。
2、无法控制集合的容量,集合的容量可能是动态分配的。
所以,更好的做法是为集合类型的成员变量提供增删改查等函数,例如某个类中有名为userList的数组,则可以为它增加几个函数:
public void add(User user){ if(user == null) // 如果对象为不合法,则不添加 return; if(userList == null) // 如果集合还未初始化,则新建 userList = new ArrayList(); if(isUserExisted(user)) // 如果该用户已经存在,则不添加 return; // 将该用户添加到集合中 userList.add(user);}public void delete(User user){ if(userList == null) return; userList.remove(user);}
String userName = null;
userName = “*******”;
EventRecorder recorder = EventRecorderFactory.getRecorderByType(0);if( recorder ==null ){ Log.error("Recorder对象为空"); lastErrorCode =0;}else{ recorder.record("记录点啥...");}
public abstract class Employee{ private int id; private String name; // 获取薪水 public abstract int getSalary(); // 获取是否有解雇员工的权利 public abstract boolean canFireOthers();}public class Programmer extends Employee{ public int getSalary(){ return 5000; } public boolean canFireOthers(){ return false; }}public class Manager extends Employee{ public int getSalary(){ return 10000; } public boolean canFireOthers(){ return true; }}
public class Employee{ private int id; private String name; private int salary; private boolean canFireOthers; public static Employee newProgrammer(String name){ return new Employee(name,5000,false); } public static Employee newManager(String name){ return new Employee(name,10000,true); } public Employee(String name,int salary,boolean canFireOthers){ this.name = name; this.salary = salary; this.canFireOthers = canFireOthers; } // 获取薪水 public int getSalary(){ return salary; } // 获取是否有解雇员工的权利 public boolean canFireOthers(){ return canFireOthers; }}