设计模式七大原则深度解析与应用实践

引言

设计模式的原则是构建高质量、可维护代码的基石。本文将详细讲解SOLID原则(单一职责、开闭原则、里氏替换、接口隔离、依赖倒置)、迪米特法则和合成复用原则,并通过代码示例和电商系统设计场景展示其实际应用。

1. 单一职责原则(SRP)

定义:一个类应该只有一个引起变化的原因。 代码示例:

// 违反SRP的类
class User {
    void login() { /* 登录逻辑 */ }
    void sendEmail() { /* 发送邮件逻辑 */ }
}

// 符合SRP的类
class User {
    void login() { /* 登录逻辑 */ }
}

class EmailSender {
    void sendEmail() { /* 发送邮件逻辑 */ }
}

应用场景:电商系统中,用户管理模块和邮件通知模块分离。

2. 开闭原则(OCP)

定义:软件实体应对扩展开放,对修改关闭。 代码示例:

interface Payment {
    void pay();
}

class CreditCardPayment implements Payment {
    void pay() { /* 信用卡支付逻辑 */ }
}

class PayPalPayment implements Payment {
    void pay() { /* PayPal支付逻辑 */ }
}

应用场景:电商支付系统支持多种支付方式扩展。

3. 里氏替换原则(LSP)

定义:子类必须能够替换父类而不影响程序正确性。 代码示例:

class Bird {
    void fly() { /* 飞行逻辑 */ }
}

class Penguin extends Bird {
    void fly() { throw new UnsupportedOperationException("企鹅不能飞!"); }
}

// 违反LSP

改进:

interface Flyable {
    void fly();
}

class Bird implements Flyable {
    void fly() { /* 飞行逻辑 */ }
}

class Penguin {
    void swim() { /* 游泳逻辑 */ }
}

应用场景:电商系统中的商品分类设计。

4. 接口隔离原则(ISP)

定义:客户端不应依赖它不需要的接口。 代码示例:

// 违反ISP的接口
interface Worker {
    void work();
    void eat();
}

// 符合ISP的接口
interface Workable {
    void work();
}

interface Eatable {
    void eat();
}

应用场景:电商系统中的员工角色分离。

5. 依赖倒置原则(DIP)

定义:高层模块不应依赖低层模块,二者应依赖抽象。 代码示例:

class OrderService {
    private Payment payment;

    OrderService(Payment payment) {
        this.payment = payment;
    }
}

应用场景:电商订单服务依赖抽象的支付接口。

6. 迪米特法则(LoD)

定义:一个对象应尽可能少地与其他对象交互。 代码示例:

// 违反LoD
class Customer {
    private Wallet wallet;

    void pay(Order order) {
        order.pay(wallet.getMoney());
    }
}

// 符合LoD
class Customer {
    private Wallet wallet;

    void pay(Order order) {
        wallet.pay(order);
    }
}

应用场景:电商系统中的钱包和订单解耦。

7. 合成复用原则(CRP)

定义:优先使用组合而非继承。 代码示例:

// 继承方式
class Car extends Engine { /* ... */ }

// 组合方式
class Car {
    private Engine engine;
    Car(Engine engine) { this.engine = engine; }
}

应用场景:电商系统中的商品和折扣策略设计。

总结

通过电商系统的实际场景,我们展示了如何应用设计模式的七大原则,构建灵活、可维护的代码。

Logo

北京人形旗下天工造物具身智能开源社区,聚焦具身天工与慧思开物两大平台

更多推荐