设计模式七大原则深度解析与应用实践
·
设计模式七大原则深度解析与应用实践
引言
设计模式的原则是构建高质量、可维护代码的基石。本文将详细讲解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; }
}
应用场景:电商系统中的商品和折扣策略设计。
总结
通过电商系统的实际场景,我们展示了如何应用设计模式的七大原则,构建灵活、可维护的代码。
更多推荐
所有评论(0)