在软件工程领域,设计模式是构建高质量系统的关键工具,不同于广为人知的GoF(Gang of Four)设计模式,GRASP模式(General Responsibility Assignment Software Patterns)提供了一套更基础的架构设计原则,这些模式像导航仪般指导开发者做出关键设计决策,尤其擅长解决面向对象设计中”责任分配”这个核心命题。
GRASP模式由软件工程先驱Craig Larman提出,其九大核心模式构成面向对象设计的DNA链:
每个模式都像瑞士军刀的不同工具,针对特定设计难题提供最优解,我们通过电商系统的订单处理模块,来看这些模式如何实际应用。
场景:计算订单总金额
class Order { private List<Item> items; public BigDecimal calculateTotal() { return items.stream() .map(Item::getSubtotal) .reduce(BigDecimal.ZERO, BigDecimal::add); } }
原理:将职责分配给拥有必要信息的类(订单对象掌握所有商品条目)
场景:创建购物车与商品的关系
class ShoppingCart { public void addItem(Product product, int quantity) { new CartItem(this, product, quantity); } }
规律:由聚合关系的父对象负责创建子对象
场景:处理结账请求
class CheckoutController { public void handleRequest(HttpRequest request) { Payment payment = new PaymentProcessor().createPayment(request); new OrderService().processPayment(payment); } }
技巧:用中间控制器协调系统操作,避免UI直接调用领域逻辑
当多个GRASP模式协同工作时,会迸发1+1>2的效果:
引用说明
本文核心观点源自Craig Larman《Applying UML and Patterns》第三版(ISBN 978-0131489066),部分案例参考Martin Fowler《企业应用架构模式》,技术细节验证基于Oracle官方Java文档及Spring Framework设计实践。