首页 > 其他分享 >软件开发六大原则-开闭原则

软件开发六大原则-开闭原则

时间:2024-07-24 22:30:26浏览次数:8  
标签:draw 原则 软件开发 void 开闭 Shape public

开闭原则(Open-Closed Principle) 是面向对象设计中的一个重要原则,中文翻译为“对扩展开放,对修改关闭”。

什么是开闭原则:
开闭原则是指一个软件实体(类、模块、函数等)应该对扩展开放(Open for extension),但对修改关闭(Closed for modification)。也就是说,软件实体应该通过扩展来实现新的功能,而不是通过修改现有的代码。

主要解决什么问题:
开闭原则的主要目的是降低系统的维护成本和扩展成本,使系统更加稳定、灵活和可维护。通过遵循开闭原则,可以减少对现有代码的修改,降低引入错误的风险,同时方便系统的扩展和维护。

在什么时候需要使用开闭原则:

  • 当需要频繁修改已有代码,导致系统不稳定或难以维护时。
  • 当系统需要支持新的功能或变化,但不希望影响已有功能时。

优点:

  • 可维护性: 通过遵循开闭原则,可以降低代码修改的频率,减少系统维护的成本。
  • 扩展性: 可以通过扩展现有代码来实现新功能,而不会破坏已有的稳定性。

缺点:

  • 复杂性: 在实践中,有时为了遵循开闭原则可能会引入更多的抽象和设计模式,增加代码的复杂度。
  • 需要预见性: 需要对系统未来的变化有一定的预见性,以便提前设计出符合开闭原则的结构。

示例代码:

// 接口
interface Shape {
    void draw();
}

// 具体图形类
class Circle implements Shape {
    @Override
    public void draw() {
        System.out.println("Drawing Circle");
    }
}

class Square implements Shape {
    @Override
    public void draw() {
        System.out.println("Drawing Square");
    }
}

// 图形绘制类
class ShapeDrawer {
    public void drawShape(Shape shape) {
        shape.draw();
    }
}

// 扩展新的图形
class Triangle implements Shape {
    @Override
    public void draw() {
        System.out.println("Drawing Triangle");
    }
}

public class OCPExample {
    public static void main(String[] args) {
        ShapeDrawer drawer = new ShapeDrawer();

        Shape circle = new Circle();
        Shape square = new Square();
        Shape triangle = new Triangle();

        drawer.drawShape(circle);
        drawer.drawShape(square);
        drawer.drawShape(triangle);
    }
}

通过接口Shape定义了图形类的抽象行为,CircleSquare是具体的图形类实现。ShapeDrawer类通过接收Shape对象来绘制不同的图形,当需要新增一种图形时,只需实现Shape接口即可,不需要修改已有的代码。

分享一个好玩的AI漫画图片生成网站,网站名称--AI Anime Generator,在线地址:https://aianimegenerator.top

标签:draw,原则,软件开发,void,开闭,Shape,public
From: https://www.cnblogs.com/sun-v/p/18321910

相关文章

  • 对于数字技术资源的选择,要遵循哪几个原则?()
    对于数字技术资源的选择,要遵循哪几个原则?()查看试题答案内容A.减负增效原则B.易学易用原则C.多渠道检索原则D.功能丰富原则对于教学素材类资源的获取,我们不仅可以使用垂直搜索的策略,还可以通过拓展资源的搜索渠道来获取更多样的资源,比如微信,抖音,小红书等等。()A.正确 ......
  • 【7种面向对象设计原则】
    一、面向对象设计原则1.1、概述如何同时提高一个软件系统的可维护性和可复用性是面向对象设计需要解决的核心问题之一。在面向对象设计中,可维护性的复用是以设计原则为基础的。每一个原则都蕴含一些面向对象设计得思想,可以从不同的角度提升一个软件系统结构的设计水平。最常......
  • MySQL 索引的设计原则
    Author:ACatSmilingSince:2024-07-22索引的创建与设计原则索引的声明与使用索引的分类MySQL的索引包括普通索引、唯一性索引、全文索引、单列索引、多列索引和空间索引等。从功能逻辑上说,索引主要有4种:普通索引、唯一索引、主键索引、全文索引。按照物理实现方式,索引......
  • 【Gin】精准应用:Gin框架中工厂模式的现代软件开发策略与实施技巧(下)
    【Gin】精准应用:Gin框架中工厂模式的现代软件开发策略与实施技巧(下)大家好我是寸铁......
  • 微服务设计原则——高性能:锁
    文章目录1.锁的问题2.无锁2.1串行无锁2.2无锁数据结构3.减少锁竞争参考文献1.锁的问题高性能系统中使用锁,往往带来的坏处要大于好处。并发编程中,锁带解决了安全问题,同时也带来了性能问题,因为锁让并发处理变成了串行操作,所以如无必要,尽量不要显式使用锁。锁和并......
  • 面向对象设计的原则有哪些?
    1、单一责任原则(SingleResponsibilityPrinciple,SRP)一个类应该仅有一个引起它变化的原因。换句话说,一个类应该只有一个职责。这有助于保持类的内聚性,降低耦合度。2、开放-封闭原则(Open-ClosePrinciple,OCP)软件实体(类、模块、函数等)应该是可以扩展的,但是不可修改的。......
  • ACL 2024 | 对25个开闭源模型数学评测,GPT-3.5-Turbo才勉强及格
    大型语言模型(LLMs)在解决问题方面的非凡能力日益显现。最近,一个值得关注的现象是,这些模型在多项数学推理的基准测试中获得了惊人的成绩。以GPT-4为例,在高难度小学应用题测试集GSM8K[1]中表现优异,准确率高达90%以上。同时,许多开源模型也展现出了不俗的实力,准确率超过80%......
  • P3373 【模板】线段树 2(区间乘+加操作,先乘后加原则)
    题目来源:https://www.luogu.com.cn/problem/P3373//题意:对区间[l,r]可以乘法,加法操作,查询和操作。//思路:既有乘法又有加法,肯定是要有两个标记。纯加法和纯乘法操作是很简单的,但是既有乘法又有加法涉及到先乘后加和先加后乘的顺序。//////所以现在是如何将先加后成也可以......
  • 参加DevSecOps认证培训 ,掌握安全高效的软件开发
    在当今快速发展的数字化时代,软件安全已成为企业关注的焦点。DevSecOps,这一融合了开发(Dev)、安全(Sec)和运维(Ops)的创新实践,正引领着软件开发的新潮流。现在,我们为您带来了一门全面的DevSecOps认证课程,旨在帮助您和您的团队在保障安全的同时,提升软件开发的效率和质量。一、DevSecOp......
  • Verilog 组合电路常见错误和always块的使用原则
    一、组合电路常见错误1、变量在多个always块中连续赋值regy;rega,b,clear;always@*if(clear)y=1'b0;always@*y=a&b;//每个always块是电路的一部分,y在两个电路上输出,不能综合2、不完整的敏感信号列表always@(a,b)y=a&b;//如果忘记......