设计模式的核心原则:提高代码的可重用性和可维护性

在软件开发中,设计模式是一种用于解决常见问题的重复性方案。它们不仅提供了一种结构化的方法来解决问题,而且还能改善代码的可读性和可维护性。设计模式遵循一些基本原则,这些原则是指导设计模式实施的准则。本文将介绍设计模式遵循的大原则,并提供相应的源代码示例。

一、单一职责原则(Single Responsibility Principle)
单一职责原则要求一个类或模块只负责一项功能。这意味着一个类应该只有一个引起它变化的原因。当一个类承担了过多的职责时,它的可维护性和可扩展性将变得很差。遵循单一职责原则可以使代码更加清晰、可读性更高。

示例代码:

class Order {
    public void calculateTotalPrice() {
        // 计算订单总价
    }

    public void generateInvoice() {
        // 生成发票
    }

    public void sendNotification() {
        // 发送通知
    }
}

根据单一职责原则,上述代码可以进行重构,将不同的职责分离成不同的类:

class Order {
    public void calculateTotalPrice() {
        // 计算订单总价
    }
}

class InvoiceGenerator {
    public void generateInvoice() {
        // 生成发票
    }
}

class NotificationSender {
    public void sendNotification() {
        // 发送通知
    }
}

二、开放-封闭原则(Open-Closed Principle)
开放-封闭原则要求软件实体(类、模块、函数等)对扩展开放,对修改封闭。这意味着在增加新功能时,应该尽量通过扩展现有代码来实现,而不是修改已有的代码。这样可以避免对现有功能的影响,提高代码的稳定性和可维护性。

示例代码:

class Shape {
    public void draw() {
        // 绘制形状
    }
}

class Circle extends Shape {
    @Override
    public void draw() {
        // 绘制圆形
    }
}

class Rectangle extends Shape {
    @Override
    public void draw() {
        // 绘制矩形
    }
}

根据开放-封闭原则,当需要增加新的形状时,不需要修改现有代码,只需要创建新的类并继承自Shape类:

class Triangle extends Shape {
    @Override
    public void draw() {
        // 绘制三角形
    }
}

三、里氏替换原则(Liskov Substitution Principle)
里氏替换原则要求程序中的对象应该可以被它们的子类所替代,而不会影响程序的正确性。换句话说,子类应该能够替代父类并且表现出相同的行为。遵循里氏替换原则可以提高代码的可扩展性和灵活性。

示例代码:

class Rectangle {
    protected int width;
    protected int height;

    public void setWidth(int width) {
        this.width = width;
    }

    public void setHeight(int height) {
        this.height = height;
    }

    public int getArea() {
        return width * height;
    }
}

class Square extends Rectangle {
    @Override
    public void setWidth(int width) {
        super.setWidth(width);
        super.setHeight(width);
    }

    @Override
    public void setHeight(int height) {
        super.setWidth(height);
        super.setHeight(height);
    }
}

根据里氏替换原则,上述代码违反了原则。因为正方形的宽高应该相等,但是通过设置宽度【设计模式的核心原则:提高代码的可重用性和可维护性】
设计模式的核心原则是为了提高代码的可重用性和可维护性。设计模式是一种解决常见问题的重复方案,它们提供了一种结构化的方法来解决问题,并改善代码的可读性和可维护性。以下是设计模式遵循的主要原则,以及相应的源代码示例。

一、单一职责原则(Single Responsibility Principle)
单一职责原则要求一个类或模块只负责一项功能。这意味着一个类应该只有一个引起它变化的原因。当一个类负责过多的职责时,它的可维护性和可扩展性将变得很差。遵循单一职责原则可以使代码更清晰、可读性更高。

示例代码:

class Order {
    public void calculateTotalPrice() {
        // 计算订单总价
    }

    public void generateInvoice() {
        // 生成发票
    }

    public void sendNotification() {
        // 发送通知
    }
}

根据单一职责原则,上述代码可以进行重构,将不同的职责分离成不同的类:

class Order {
    public void calculateTotalPrice() {
        // 计算订单总价
    }
}

class InvoiceGenerator {
    public void generateInvoice() {
        // 生成发票
    }
}

class NotificationSender {
    public void sendNotification() {
        // 发送通知
    }
}

二、开放-封闭原则(Open-Closed Principle)
开放-封闭原则要求软件实体对扩展开放,对修改封闭。这意味着在增加新功能时,应该尽量通过扩展现有代码来实现,而不是修改已有的代码。这样可以避免对现有功能的影响,提高代码的稳定性和可维护性。

示例代码:

class Shape {
    public void draw() {
        // 绘制形状
    }
}

class Circle extends Shape {
    @Override
    public void draw() {
        // 绘制圆形
    }
}

class Rectangle extends Shape {
    @Override
    public void draw() {
        // 绘制矩形
    }
}

根据开放-封闭原则,当需要增加新的形状时,不需要修改现有代码,只需要创建新的类并继承自Shape类:

class Triangle extends Shape {
    @Override
    public void draw() {
        // 绘制三角形
    }
}

三、里氏替换原则(Liskov Substitution Principle)
里氏替换原则要求程序中的对象应该可以被它们的子类替代,而不会影响程序的正确性。换句话说,子类应该能够替代父类并且表现出相同的行为。遵循里氏替换原则可以提高代码的可扩展性和灵活性。

示例代码:

class Shape {
    protected int width;
    protected int height;

    public void setWidth(int width) {
        this.width = width;
    }

    public void setHeight(int height) {
        this.height = height;
    }

    public int getArea() {
        return width * height;
    }
}

class Rectangle extends Shape {
    //...
}

class Square extends Shape {
    @Override
    public void setWidth(int width) {
        super.setWidth(width);
        super.setHeight(width);
    }

    @Override
    public void setHeight(int height) {
        super.setWidth(height);
        super.setHeight(height);
    }
}

根据里氏替换原则,上述代码违反了原则。因为正方形的宽高应该相等,但是通过设置宽度和高度分别来实现,破坏了父类和子类之间的行为一致

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值