【不就是Java设计模式吗】代码详解编程中最基础、最重要的设计原则——开闭原则(OCP)

简介: 【不就是Java设计模式吗】代码详解编程中最基础、最重要的设计原则——开闭原则(OCP)

一、基本介绍

开闭原则(OCP)是编程中最基础、最重要的设计原则

一个软件实体,如类、模块和函数应该对提供方扩展开放,对使用方修改关闭。用抽象构建框架,用实现扩展细节

当软件需要变化时,尽量通过扩展软件实体的行为来实现变化,而不是通过修改已有的代码来实现变化

编程中遵循其它的原则,以及使用设计模式的目的就是遵循开闭原则

二、代码类图设计

类图设计如下:

image.png


三、代码对比

代码一:

public class One {
    public static void main(String[] args) {
        GraphicEditor graphicEditor = new GraphicEditor();
        graphicEditor.drawShape(new Rectangle());
        graphicEditor.drawShape(new Circle());
        graphicEditor.drawShape(new Triangle());
    }
}
//这是一个用于绘图的类 [使用方]
class GraphicEditor {
    //接收Shape对象,然后根据type,来绘制不同的图形
    public void drawShape(Shape s) {
        if (s.m_type == 1)
            drawRectangle();
        else if (s.m_type == 2)
            drawCircle();
        else if (s.m_type == 3)
            drawTriangle();
    }
    //绘制矩形
    public void drawRectangle() {
        System.out.println(" 绘制矩形 ");
    }
    //绘制圆形
    public void drawCircle() {
        System.out.println(" 绘制圆形 ");
    }
    //绘制三角形
    public void drawTriangle() {
        System.out.println(" 绘制三角形 ");
    }
}
//Shape类,基类
class Shape {
    int m_type;
}
class Rectangle extends Shape {
    public Rectangle() {
        super.m_type = 1;
    }
}
class Circle extends Shape {
    public Circle() {
        super.m_type = 2;
    }
}
//新增画三角形
class Triangle extends Shape {
    public Triangle() {
        super.m_type = 3;
    }
}


代码一的优点是比较好理解,简单易操作。其缺点是违反了OCP开闭原则:当我们给类增加新功能的时候,尽量不修改代码或者尽可能少修改代码。当我们新增画三角形这个类时,修改的地方就比较多了,所以不好


代码二:

public class Two {
    public static void main(String[] args) {
        GraphicEditor1 graphicEditor1 = new GraphicEditor1();
        graphicEditor1.drawShape(new Rectangle1());
        graphicEditor1.drawShape(new Circle1());
        graphicEditor1.drawShape(new Triangle1());
        graphicEditor1.drawShape(new Others());
    }
}
//这是一个用于绘图的类 [使用方]
class GraphicEditor1 {
    public void drawShape(Shape1 shape1){
        shape1.draw();
    }
}
abstract class Shape1 {
    public abstract void draw();
}
class Rectangle1 extends Shape1 {
    public void draw() {
        System.out.println("绘制矩形");
    }
}
class Circle1 extends Shape1 {
    public void draw() {
        System.out.println("绘制圆形");
    }
}
//新增画三角形
class Triangle1 extends Shape1 {
    public void draw() {
        System.out.println("绘制三角形");
    }
}
class Others extends Shape1{
    public void draw() {
        System.out.println("绘制其它图形");
    }
}



代码二把创建代码一中Shape类做成抽象类Shape1,并提供一个抽象的draw方法,让子类去实现即可,这样我们有新的图形种类的时候,只需要让新的图形类继承Shape1,并实现draw方法就可以了,使用方的代码就不需要修改,满足了开闭原则。



相关文章
|
7天前
|
Java
在 Java 中捕获和处理自定义异常的代码示例
本文提供了一个 Java 代码示例,展示了如何捕获和处理自定义异常。通过创建自定义异常类并使用 try-catch 语句,可以更灵活地处理程序中的错误情况。
|
20天前
|
设计模式 开发者 Python
Python编程中的设计模式:工厂方法模式###
本文深入浅出地探讨了Python编程中的一种重要设计模式——工厂方法模式。通过具体案例和代码示例,我们将了解工厂方法模式的定义、应用场景、实现步骤以及其优势与潜在缺点。无论你是Python新手还是有经验的开发者,都能从本文中获得关于如何在实际项目中有效应用工厂方法模式的启发。 ###
|
21天前
|
XML 安全 Java
Java反射机制:解锁代码的无限可能
Java 反射(Reflection)是Java 的特征之一,它允许程序在运行时动态地访问和操作类的信息,包括类的属性、方法和构造函数。 反射机制能够使程序具备更大的灵活性和扩展性
34 5
Java反射机制:解锁代码的无限可能
|
8天前
|
设计模式 算法 搜索推荐
Python编程中的设计模式:优雅解决复杂问题的钥匙####
本文将探讨Python编程中几种核心设计模式的应用实例与优势,不涉及具体代码示例,而是聚焦于每种模式背后的设计理念、适用场景及其如何促进代码的可维护性和扩展性。通过理解这些设计模式,开发者可以更加高效地构建软件系统,实现代码复用,提升项目质量。 ####
|
17天前
|
jenkins Java 测试技术
如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例详细说明
本文介绍了如何使用 Jenkins 自动发布 Java 代码,通过一个电商公司后端服务的实际案例,详细说明了从 Jenkins 安装配置到自动构建、测试和部署的全流程。文中还提供了一个 Jenkinsfile 示例,并分享了实践经验,强调了版本控制、自动化测试等关键点的重要性。
48 3
|
22天前
|
存储 安全 Java
系统安全架构的深度解析与实践:Java代码实现
【11月更文挑战第1天】系统安全架构是保护信息系统免受各种威胁和攻击的关键。作为系统架构师,设计一套完善的系统安全架构不仅需要对各种安全威胁有深入理解,还需要熟练掌握各种安全技术和工具。
64 10
|
18天前
|
分布式计算 Java MaxCompute
ODPS MR节点跑graph连通分量计算代码报错java heap space如何解决
任务启动命令:jar -resources odps-graph-connect-family-2.0-SNAPSHOT.jar -classpath ./odps-graph-connect-family-2.0-SNAPSHOT.jar ConnectFamily 若是设置参数该如何设置
|
16天前
|
Java
Java代码解释++i和i++的五个主要区别
本文介绍了前缀递增(++i)和后缀递增(i++)的区别。两者在独立语句中无差异,但在赋值表达式中,i++ 返回原值,++i 返回新值;在复杂表达式中计算顺序不同;在循环中虽结果相同但使用方式有别。最后通过 `Counter` 类模拟了两者的内部实现原理。
Java代码解释++i和i++的五个主要区别
|
18天前
|
设计模式 安全 Java
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式
Kotlin教程笔记(51) - 改良设计模式 - 构建者模式
|
2月前
|
设计模式 数据库连接 PHP
PHP中的设计模式:提升代码的可维护性与扩展性在软件开发过程中,设计模式是开发者们经常用到的工具之一。它们提供了经过验证的解决方案,可以帮助我们解决常见的软件设计问题。本文将介绍PHP中常用的设计模式,以及如何利用这些模式来提高代码的可维护性和扩展性。我们将从基础的设计模式入手,逐步深入到更复杂的应用场景。通过实际案例分析,读者可以更好地理解如何在PHP开发中应用这些设计模式,从而写出更加高效、灵活和易于维护的代码。
本文探讨了PHP中常用的设计模式及其在实际项目中的应用。内容涵盖设计模式的基本概念、分类和具体使用场景,重点介绍了单例模式、工厂模式和观察者模式等常见模式。通过具体的代码示例,展示了如何在PHP项目中有效利用设计模式来提升代码的可维护性和扩展性。文章还讨论了设计模式的选择原则和注意事项,帮助开发者在不同情境下做出最佳决策。