UML 2.5 类图实战:6种关系代码实现与3个典型业务场景解析
UML 2.5 类图实战6种关系代码实现与3个典型业务场景解析在面向对象编程的世界里UML类图就像建筑师手中的蓝图它能清晰地描绘出系统中各个类之间的关系。对于开发者而言掌握类图中六种核心关系的代码实现就如同获得了一把打开高质量代码大门的钥匙。本文将带你深入理解这些关系并通过电商、权限管理和文件系统三个典型场景展示如何将理论转化为实践。1. 类图六种核心关系解析与代码实现1.1 依赖关系Dependency依赖是最基础的关系表示一个类的变化可能影响另一个类。在代码中通常表现为方法参数局部变量静态方法调用Java实现示例// 顾客下单时需要自行车送货 public class Customer { public void deliverOrder(Bicycle bicycle) { bicycle.deliver(); } } public class Bicycle { public void deliver() { System.out.println(自行车送货中...); } }Python实现示例class Bicycle: def deliver(self): print(自行车送货中...) class Customer: def deliver_order(self, bicycle: Bicycle): bicycle.deliver()1.2 关联关系Association关联表示类之间的长期关系比依赖更强。分为单向关联和双向关联。Java实现双向关联public class Student { private School school; public void setSchool(School school) { this.school school; school.addStudent(this); } } public class School { private ListStudent students new ArrayList(); public void addStudent(Student student) { students.add(student); } }Python实现单向关联class IDCard: def __init__(self, id_number: str): self.id_number id_number class Person: def __init__(self): self.id_card: Optional[IDCard] None1.3 聚合关系Aggregationhas-a关系整体与部分可独立存在。用空心菱形表示。电商场景Java实现public class ShoppingCart { private ListProduct products; public ShoppingCart() { this.products new ArrayList(); } public void addProduct(Product product) { products.add(product); } // 购物车清空时产品仍然存在 public void clear() { products.clear(); } } public class Product { private String name; private double price; }1.4 组合关系Composition比聚合更强的contains-a关系生命周期一致。用实心菱形表示。文件系统Python实现class File: def __init__(self, name: str): self.name name class Folder: def __init__(self, name: str): self.name name self.files: List[File] [] def add_file(self, file_name: str): self.files.append(File(file_name)) # 文件夹删除时内部文件一并删除 def delete(self): self.files.clear()1.5 泛化关系Generalization即继承关系子类继承父类的结构和行为。Java继承示例public abstract class Payment { protected double amount; public abstract void process(); } public class CreditCardPayment extends Payment { private String cardNumber; Override public void process() { System.out.println(信用卡支付处理中...); } }1.6 实现关系Realization类实现接口的契约关系。Python接口实现from abc import ABC, abstractmethod class Authenticator(ABC): abstractmethod def authenticate(self, username: str, password: str) - bool: pass class DatabaseAuthenticator(Authenticator): def authenticate(self, username: str, password: str) - bool: # 数据库验证逻辑 return True2. 电商订单系统完整类图实现2.1 核心类结构设计// 订单聚合根 public class Order { private String orderId; private Customer customer; private ListOrderItem items new ArrayList(); private Payment payment; public double calculateTotal() { return items.stream().mapToDouble(OrderItem::getSubtotal).sum(); } } // 订单项与产品关联 public class OrderItem { private Product product; private int quantity; public double getSubtotal() { return product.getPrice() * quantity; } } // 支付策略模式 public interface PaymentStrategy { void pay(double amount); } public class CreditCardPayment implements PaymentStrategy { public void pay(double amount) { System.out.println(信用卡支付 amount); } }2.2 关系映射表关系类型涉及的类代码表现生命周期组合Order-OrderItemOrder包含OrderItem列表同生共死聚合Order-CustomerOrder引用Customer独立存在关联OrderItem-Product通过成员变量持有长期关系实现PaymentStrategy-具体支付类接口实现契约关系3. 三大业务场景类图对比分析3.1 电商系统核心关系订单与商品聚合关系购物车与商品临时关联支付策略接口实现关系用户与订单一对多关联典型代码结构class ECommerceSystem: def __init__(self): self.users: List[User] [] self.products: List[Product] [] class User: def __init__(self): self.orders: List[Order] [] self.cart ShoppingCart()3.2 权限管理系统设计角色与权限多对多关联用户与角色聚合关系策略模式接口实现Java实现片段public class RBACSystem { private MapUser, SetRole userRoles new HashMap(); private MapRole, SetPermission rolePermissions new HashMap(); public boolean checkPermission(User user, Permission permission) { return userRoles.getOrDefault(user, Collections.emptySet()) .stream() .anyMatch(role - rolePermissions.getOrDefault(role, Collections.emptySet()) .contains(permission)); } }3.3 文件系统模型文件夹与文件组合关系文件与权限关联关系文件类型继承关系类图关键点------------- | File | ------------- | name: String| ------------- ^ | ------------- | | --------------- ----------------- | TextFile | | BinaryFile | --------------- ----------------- | encoding: str| | format: str | --------------- -----------------4. 实战中的常见问题与解决方案4.1 关系误用识别表错误模式正确关系错误表现修正方案滥用继承组合/聚合父类频繁修改影响子类改用包含循环依赖单向关联类A引用BB又引用A引入中间层过度聚合简单关联部分对象无独立意义改为组合4.2 性能优化技巧关联查询优化// 懒加载一对多关系 Entity public class Order { OneToMany(fetch FetchType.LAZY) private ListOrderItem items; }缓存策略class ProductCatalog: def __init__(self): self._products_cache {} def get_product(self, id) - Product: if id not in self._products_cache: self._products_cache[id] self._load_from_db(id) return self._products_cache[id]4.3 扩展性设计模式策略模式处理支付public class PaymentProcessor { private PaymentStrategy strategy; public void setStrategy(PaymentStrategy strategy) { this.strategy strategy; } public void processPayment(double amount) { strategy.pay(amount); } }观察者模式实现通知class Order: def __init__(self): self._observers [] def add_observer(self, observer): self._observers.append(observer) def complete(self): for observer in self._observers: observer.notify(self)掌握UML类图六种关系的代码实现能帮助开发者在系统设计阶段就构建出清晰、可维护的架构。通过电商、权限管理和文件系统这三个典型场景的实践我们可以看到同样的关系在不同业务领域的具体应用。记住好的类设计应该像乐高积木一样各个模块关系明确既能独立变化又能无缝组合。