设计模式——依赖倒置、接口隔离、合成复用原则

SOLID原则中的剩余三个原则是依赖倒置原则(Dependency Inversion Principle, DIP)、接口隔离原则(Interface Segregation Principle, ISP)和合成复用原则(Composite Reuse Principle, CRP)。以下是这些原则的Java代码示例:

依赖倒置原则(DIP)
依赖倒置原则指出高层模块不应依赖于低层模块,二者都应该依赖于抽象(接口或抽象类)。抽象不应依赖于细节,细节应依赖于抽象。

public interface Shape {
double area();
}

public class Circle implements Shape {
private double radius;

public Circle(double radius) {
    this.radius = radius;
}

@Override
public double area() {
    return Math.PI * radius * radius;
}

}

public class ShapeCalculator {
public double calculateArea(Shape shape) {
return shape.area();
}
}

public class Main {
public static void main(String[] args) {
Shape circle = new Circle(5);
ShapeCalculator calculator = new ShapeCalculator();
double area = calculator.calculateArea(circle);
System.out.println("Area: " + area);
}
}
接口隔离原则(ISP)
接口隔离原则主张不应该强迫客户依赖于它们不使用的方法。一个类对一个接口的依赖应该尽可能少。

public interface Vehicle {
void start();
void stop();
}

public interface Drivable {
void drive();
}

public interface Parkable {
void park();
}

// 现在我们可以根据不同的需求实现不同的接口
public class Car implements Drivable, Parkable {
@Override
public void drive() {
System.out.println(“Car is driving”);
}

@Override
public void park() {
    System.out.println("Car is parked");
}

}

public class Boat implements Drivable {
@Override
public void drive() {
System.out.println(“Boat is sailing”);
}
}
合成复用原则(CRP)
合成复用原则提倡优先使用对象的组合,而不是通过继承来复用代码。

public class Component {
public void doWork() {
// 基本工作
}
}

public class Decorator extends Component {
private Component component;

public Decorator(Component component) {
    this.component = component;
}

@Override
public void doWork() {
    component.doWork();
    // 增加额外功能
}

}

public class EnhancedComponent extends Decorator {
public EnhancedComponent(Component component) {
super(component);
}

@Override
public void doWork() {
    super.doWork();
    // 进一步增强功能
}

}

public class Main {
public static void main(String[] args) {
Component basicComponent = new Component();
Component enhancedComponent = new EnhancedComponent(basicComponent);
enhancedComponent.doWork(); // 组合基本功能和增强功能
}
}
在这些示例中:

依赖倒置原则通过使用接口Shape来允许ShapeCalculator类对具体实现类Circle的解耦。
接口隔离原则通过将Vehicle接口拆分为Drivable和Parkable接口,使得Car和Boat类只需实现它们需要的功能。
合成复用原则通过使用装饰者模式(Decorator类)来展示如何通过组合来复用Component类的功能,而不是通过继承。

  • 15
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值