软件工程设计原理开放封闭原则 ,具体实现及JAVA代码举例

简介: 开放封闭原则(OCP)是面向对象设计的关键,主张软件应对扩展开放、对修改封闭,以增强灵活性和可维护性。实现OCP需通过抽象和多态,如使用接口。不遵守OCP的例子是在现有类中直接添加新功能,而遵守OCP则通过创建新类实现接口或继承抽象类来扩展。Java代码展示了如何通过接口实现OCP,使得`GraphicEditor`无需修改即可支持新图形类型。遵循OCP能提升系统灵活性、可维护性和代码重用。

开放封闭原则(Open/Closed Principle, OCP)是面向对象设计的核心原则之一,它指出软件实体(类、模块、函数等)应该对扩展开放,对修改封闭。这意味着在不修改已有代码的前提下,可以通过扩展来增加新的功能,从而提高软件系统的灵活性和可维护性。

具体实现

实现开放封闭原则的关键是通过抽象和多态性来实现扩展性。设计时,应该尽量使用接口和抽象类,使得新的功能可以通过添加新的实现来扩展,而不需要修改现有的代码。

举例前的分析:

  • 不遵守OCP:直接在现有类中添加新方法或修改现有方法来增加新功能。
  • 遵守OCP:通过创建新的类实现现有的接口或继承现有的抽象类来添加新功能。

JAVA代码举例

假设我们有一个图形编辑器,要求能够绘制不同类型的图形。

不遵守开放封闭原则的代码:

java复制代码

class GraphicEditor {
    public void drawShape(Shape s) {
        if (s.type == 1)
            drawRectangle(s);
        else if (s.type == 2)
            drawCircle(s);
        // 每当添加新的图形时,都需要修改这个方法
    }

    public void drawRectangle(Shape r) {
        // 绘制矩形
    }

    public void drawCircle(Shape c) {
        // 绘制圆形
    }
}

在上述代码中,GraphicEditor 类需要知道并根据图形的类型来选择绘制方法,这违反了开放封闭原则。添加新图形时,必须修改 drawShape 方法。

遵守开放封闭原则的代码:

java复制代码

interface Shape {
    void draw();
}

class Rectangle implements Shape {
    public void draw() {
        // 绘制矩形
    }
}

class Circle implements Shape {
    public void draw() {
        // 绘制圆形
    }
}

class GraphicEditor {
    public void drawShape(Shape shape) {
        shape.draw();
    }
}

在遵守OCP的代码中,GraphicEditor 不需要知道具体的图形类型,它只关心图形是否实现了 Shape 接口。这样,添加新的图形类型时,只需添加一个新的 Shape 实现,而不需要修改现有的 GraphicEditor 类。

实践中的好处

  • 增强系统的灵活性:可以轻松添加新功能而不影响既有功能。
  • 提高系统的可维护性:减少了因扩展功能而引入的错误。
  • 促进代码的重用:通过抽象化设计,促进了通用代码的重用。

遵循开放封闭原则有助于构建稳定且易于扩展的软件系统,使得系统能够随着需求的变化而灵活地适应和发展。

相关文章
|
7月前
|
Java
软件工程设计原理迪米特法则原则优缺点及JAVA代码举例
【4月更文挑战第8天】迪米特法则,也称为最少知识原则,是软件工程中一个旨在减少软件实体之间耦合关系的设计原则。它建议一个对象应该对其他对象有尽可能少的了解,并且只与直接的朋友通信。
102 10
|
7月前
|
存储 Java
软件工程设计原理单一职责原则 ,具体实现及JAVA代码举例
【4月更文挑战第6天】单一职责原则(Single Responsibility Principle, SRP)是面向对象设计原则之一,它指出一个类应该仅有一个变化的原因,即一个类应该只负责一项职责。这样做的目的是降低类的复杂性,提高系统的可维护性。
65 1
|
7月前
|
设计模式 Java
23种设计模式,外观模式的概念优缺点以及JAVA代码举例
【4月更文挑战第6天】外观模式(Facade Pattern)是一种使用频率非常高的结构型设计模式,其核心思想是为子系统中的一组接口提供一个一致的界面。外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。简而言之,外观模式就是客户端与复杂子系统之间的一个简单而统一的接口
86 3
|
设计模式 Java
【Java用法】Java设计模式之设计的模式的原则
【Java用法】Java设计模式之设计的模式的原则
48 0
|
7月前
|
Java
软件工程设计原理里氏替换原则 ,具体实现及JAVA代码举例
里氏替换原则(Liskov Substitution Principle, LSP)是面向对象设计的基本原则之一,由Barbara Liskov提出。这个原则指出,如果类 S 是类 T 的子类型,则程序中使用 T 的对象的地方都可以不经修改地使用 S 的对象。换句话说,子类的对象应该能够替换掉它们的父类对象,而不影响程序的正确性。这个原则强调了继承关系中的行为兼容性,保证了基类和派生类之间的正确抽象和继承关系。
91 3
|
7月前
|
Java 编译器 数据库
滚雪球学Java(40):解读Java面向对象编程中的方法和继承,打造可维护的代码库
【5月更文挑战第15天】🏆本文收录于「滚雪球学Java」专栏,专业攻坚指数级提升,希望能够助你一臂之力,帮你早日登顶实现财富自由🚀;同时,欢迎大家关注&&收藏&&订阅!持续更新中,up!up!up!!
59 4
|
6月前
|
Java
谁说 Java 封装很难?跟我学,秒变编程大神!
【6月更文挑战第15天】Java封装,就是将数据和相关操作打包,保护数据免受非法访问。比如`SuperHero`类,它的属性用`private`隐藏,通过`get/set`方法控制访问。这样提高了数据安全性和稳定性。就像超级英雄的超能力,不能随意使用。掌握封装,编程就变得更简单,助你成为Java大神!开始征服代码高峰吧!💪🎉
29 0
|
7月前
|
设计模式 Java
23种设计模式,中介者模式的概念优缺点以及JAVA代码举例
【4月更文挑战第8天】中介者模式是一种行为设计模式,它通过一个中介对象来封装一系列对象交互。中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
86 8
|
7月前
|
设计模式 Java Windows
23种设计模式,抽象工厂模式的概念优缺点以及JAVA代码举例
【4月更文挑战第10天】抽象工厂模式是一种创建型设计模式,它提供了一个接口用于创建相关或依赖对象的家族,而不需要指定具体类。该模式允许客户端在不知道具体类的情况下,通过其共同的接口来创建一组产品。
78 7
|
7月前
|
设计模式 存储 Java
23种设计模式,解释器模式的概念优缺点以及JAVA代码举例
【4月更文挑战第7天】解释器模式是一种行为设计模式,它用于定义一个语言的语法表示,并提供一个解释器来处理这种语法。主要用于频繁需要解释执行一组固定语法规则的场景,例如编程语言解释器、规则引擎等。
51 3