java如何设计类
设计类的核心原则
面向对象设计遵循SOLID原则:单一职责(一个类只做一件事)、开闭原则(对扩展开放,对修改关闭)、里氏替换(子类可替换父类)、接口隔离(专用接口优于通用接口)、依赖倒置(依赖抽象而非实现)。
高内聚低耦合是关键目标,类内部元素紧密相关,类之间依赖最小化。优先使用组合而非继承,避免过度复杂的继承层次。
定义类的基本结构
类声明包含访问修饰符(public/protected/private)、class关键字和类名。命名采用大驼峰式,如CustomerAccount。
字段声明使用有意义的名词,遵循小驼峰命名。常量使用全大写加下划线:
private String accountName;
public static final int MAX_RETRY = 3;
方法命名采用动词+名词的小驼峰形式,如calculateTax()。参数控制在7个以内,过多考虑拆分方法或引入参数对象。
封装与访问控制
使用private保护字段,通过getter/setter控制访问。布尔属性命名采用is前缀:
private boolean active;
public boolean isActive() {
return active;
}
final修饰不可变字段,static用于类级属性和工具方法。考虑不可变类设计,所有字段设为final且无setter。
继承与多态设计
使用extends建立继承关系,子类通过super()调用父类构造器。抽象类用abstract修饰,包含抽象方法和具体方法。
接口定义行为契约,Java8+支持默认方法。优先使用接口而非抽象类:
public interface PaymentProcessor {
void process(Payment payment);
default boolean validate(Payment payment) {
// 默认实现
}
}
异常处理设计
检查异常强制处理,非检查异常继承RuntimeException。自定义异常应提供有用信息:
public class InsufficientFundsException extends RuntimeException {
public InsufficientFundsException(String message) {
super(message);
}
}
方法应声明可能抛出的检查异常,文档中用@throws说明异常条件。
类关系设计
关联关系通过字段引用实现。聚合使用setter注入部件,组合在构造函数中创建部件:
// 聚合示例
public class Department {
private List<Employee> employees;
public void addEmployee(Employee e) {
employees.add(e);
}
}
// 组合示例
public class Car {
private final Engine engine;
public Car() {
this.engine = new Engine();
}
}
依赖关系通过方法参数临时建立,避免长期持有引用。
设计模式应用
常用模式包括:
- 工厂方法:隐藏对象创建逻辑
- 策略模式:封装可互换算法
- 观察者模式:实现事件通知
- 装饰者模式:动态添加职责
示例策略模式实现:
public interface DiscountStrategy {
BigDecimal applyDiscount(BigDecimal amount);
}
public class SeasonalDiscount implements DiscountStrategy {
@Override
public BigDecimal applyDiscount(BigDecimal amount) {
return amount.multiply(BigDecimal.valueOf(0.9));
}
}
文档与测试
类注释包含作者、版本和功能说明。方法注释说明参数、返回值和异常:
/
* 计算订单折扣后的总价
* @param order 待处理的订单对象
* @return 折后总价
* @throws InvalidOrderException 当订单无效时抛出
*/
public BigDecimal calculateFinalPrice(Order order) {
// 实现
}
为每个公共方法编写单元测试,覆盖边界条件和异常场景。使用断言验证预期行为。







