特例模式与空对象模式

特例模式指的是为处理某些特殊情况而创建的特殊类或对象。这些类或对象专门用于处理特定的异常情况或边界条件,以便简化主业务逻辑的处理。
应用场景:用于需要处理某些特殊输入、边界条件或错误情况的场景。
例如,处理数据库查询时,返回一个特例对象表示没有找到数据。

空对象模式通过提供一个行为为空的对象来替代null,以避免对null进行检查,从而简化代码。
应用场景:用于需要频繁处理null值的场景,通过使用空对象避免了多余的null检查。
例如,一个集合中可能会包含null元素,通过使用空对象代替null,可以简化集合操作。

特例模式示例

//修改前
	ProjectEntity project = getById(projectId);
		if (Objects.isNull(project)) {
			return Result.error(AppHttpCodeEnum.PROJECT_IS_NOT_EXIST);
		}

//修改后
    ProjectEntity project = getByIdOrDefault(projectId, new NullProjectEntity());
// 特例模式实现: NullProjectEntity
public class NullProjectEntity extends ProjectEntity {
   @Override
    public boolean isNull() {
        return true;
    }

    // 覆盖其他必要的方法,返回默认值或空行为
}

// 通用方法获取项目,如果不存在则返回默认项目
private ProjectEntity getByIdOrDefault(Long projectId, ProjectEntity defaultProject) {
    ProjectEntity project = getById(projectId);
    return project != null ? project : defaultProject;
}

// 项目实体类
public class ProjectEntity {
    public boolean isNull() {
        return false;
    }

    // 其他方法和属性
}

空对象模式示例

//修改前
      list<Employee> employees = getEmployee();
      if(employees != null){
          for(Employee e : employees){
              totalPay += e.getPay();
          }
      }

//修改后
      list<Employee> employees = getEmployee();
      for(Employee e : employees){
         totalPay += e.getPay();
      }

//如果为空返回空列表
public List<Employee> getEmployee(){
    if(//如果 employees 为空){
        return Collections.emptyList();
    }
}

posted @ 2024-07-17 11:45  狗狗没有坏心眼  阅读(3)  评论(0编辑  收藏  举报