CRP(Common Reuse Principle,共用原则)

CRP(Common Reuse Principle,共用原则)是面向对象编程中的一个重要原则,它要求软件实体(类、模块、函数等)应该共用,而不是重复。下面是一个简单的例子,说明CRP的应用。

假设我们有一个图形类Shape,它有一个求面积的方法getArea(),并且有两个子类RectangleCircle,它们分别表示矩形和圆形,它们都继承自Shape类,如下所示:

public abstract class Shape {
    public abstract double getArea();
}

public class Rectangle extends Shape {
    private double width;
    private double height;

    public Rectangle(double width, double height) {
        this.width = width;
        this.height = height;
    }

    @Override
    public double getArea() {
        return width * height;
    }
}

public class Circle extends Shape {
    private double radius;

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

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

现在我们要设计一个计算所有图形面积之和的方法getTotalArea()假设我们有一个图形类Shape,它有一个求面积的方法getArea(),并且有两个子类RectangleCircle,它们分别表示矩形和圆形,它们都继承自Shape类,如下所示:

public abstract class Shape {
    public abstract double getArea();
}

public class Rectangle extends Shape {
    private double width;
    private double height;

    public Rectangle(double width, double height) {
        this.width = width;
        this.height = height;
    }

    @Override
    public double getArea() {
        return width * height;
    }
}

public class Circle extends Shape {
    private double radius;

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

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

现在我们要设计一个计算所有图形面积之和的方法getTotalArea(),并且我们知道这个方法可能会被其他模块或类重复使用,因此我们需要遵循CRP原则,尽量将方法设计成可复用的,避免重复实现类似的功能。

为了实现这个目标,我们可以将getTotalArea()方法设计成一个静态工具方法,放在一个独立的工具类ShapeUtils中,这样其他模块或类就可以直接使用它,而不需要重复实现类似的功能。具体实现如下:

public class ShapeUtils {
    public static double getTotalArea(Shape[] shapes) {
        double totalArea = 0.0;
        for (Shape shape : shapes) {
            totalArea += shape.getArea();
        }
        return totalArea;
    }
}

在这个例子中,我们将计算所有图形面积之和的方法getTotalArea()放在了一个独立的工具类ShapeUtils中,并且将它设计成一个静态方法,接受一个Shape类型的数组作为参数,返回所有图形的总面积。这样其他模块或类就可以直接使用它,而不需要重复实现类似的功能。

例如,我们可以在其他类中直接调用ShapeUtils.getTotalArea()方法来计算图形面积,例如:

Rectangle r1 = new Rectangle(3.0, 4.0);
Rectangle r2 = new Rectangle(5.0, 6.0);
Circle c1 = new Circle(2.0);

Shape[] shapes = {r1, r2, c1};

double totalArea = ShapeUtils.getTotalArea(shapes);
System.out.println("Total area: " + totalArea);

在这个例子中,我们创建了两个矩形和一个圆形,并将它们放入一个Shape类型的数组中,然后调用ShapeUtils.getTotalArea()方法来计算所有图形的总面积。通过这种方式,我们遵循了CRP原则,将计算所有图形面积之和的方法设计成一个可复用的工具方法,避免了重复实现类似的功能,提高了代码的可复用性和可维护性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值