Java基础学习总结(84)——Java面向对象六大原则和设计模式
发布日期:2025-04-03 00:03:50 浏览次数:15 分类:精选文章

本文共 2166 字,大约阅读时间需要 7 分钟。

面向对象六大原则

在编程领域,面向对象六大原则是安身立命的重要基础。这六大原则不仅为我们提供了统一的规则,更为我们构建清晰、可维护的代码体系奠定了坚实基础。掌握这些原则,不仅能让你的程序更具韧性,更能让你的代码更容易被他人理解和复用。但要强调的是,仅仅记熟这些原则并不能直接保证你的程序会变得灵活清晰。只有在实际编码过程中将这些概念整合起来,才能真正提升你的编程能力。

第一,抽象与概括。好的软件设计离不开抽象思维能力。抽象就是从具体的实现细节中提炼出那些共性与核心需求,把复杂的系统拆分成更小、更容易处理的部分。在编程中,这意味着我们要学会用概念代替具体实现,用接口和抽象类来定义程序的骨架,这与我们在设计UML_class_diag.png中看到的类结构图不谋而合。

第二,高内聚低耦合。就像我们在建筑工地上,不能用同样的工具来打结和拼接不同材质的混凝土,程序内部的各个模块也不应随意耦合。高内聚意味着同一类的模块、同一层次的功能要尽可能放在一起,耦合度低则意味着各个模块之间要保持最小的必要联系。这样一来,当某部分模块发生变化时,不会对整个系统造成连锁反应。

第三,多态。多态是指同一类的实例能够表现出多种不同的行为。这在面向对象编程中得到了充分体现。常见的实现方式包括多方法、多态参数和多态解析等。你或许已经见过类似这样的代码:

public class Animal {// 以不同的子类继承自Animal来实现不同行为void move() {// 由子类决定如何移动switch (getClass()) {case Dog: // 停下来,拜拜break;case Cat: //直接跑...}}}

第四,多态参数。多态参数允许参数在运行时绑定,但到了编译时反而是静态的。这种特性可以让代码更加灵活,避免了硬编码的局限性。你是否用过这样的现象:

StringBuilder builder = new StringBuilder();Appender app = new Appender(new PrintStreamAppender(new FileOutputStream("log.txt"), true),builder);// 在运行过程中,Appender使用了不同的输出方式和不同的StringBuilder实例

这里的Appender接口包含了两个版本:一个使用PrintStream,一个使用StringBuilder,而具体使用哪一种在运行时由配置文件决定,这正是多态参数最典型的应用场景。

第五,多态解析。多态解析则属于反向过程,它是关于如何在运行时确定一个具体的类。Java中的反射机制、类型转换工具类等都体现了这一原则。举个例子,你在配置文件中定义了一个按照顺序加载的类路径,而具体是哪一个类被加载则是在运行时动态确定的,这正是多态解析的体现。

第四,继承与多态。继承是面向对象语言最。继承提供了代码复用的一种机制,但简单的继承不足以应对复杂的多样性问题。这里的多样性不仅指不同的情况,而是程序需要处理的各个方面。通过合理的继承结构和多态机制,我们可以让程序在处理各种不同的情况时,都能保持高度的灵活性.

第六,多态解析。多态解析则属于反向过程,它是关于如何在运行时确定一个具体的类。Java中的反射机制、类型转换工具类等都体现了这一原则。举个例子,你在配置文件中定义了一个按照顺序加载的类路径,而具体是哪一个类被加载则是在运行时动态确定的,这正是多态解析的体现。

抱歉,可能有些地方有点混乱。我们再重新整理一下:

  • Abstraction and Generalization

    抽象与概括。好的软件设计离不开抽象思维能力。在编程中,这意味着我们要学会用概念代替具体实现,用接口和抽象类来定义程序的骨架。

  • High Cohesion, Low Coupling

    高内聚低耦合。同一类的模块、同一层次的功能要尽可能放在一起,耦合度低则意味着各个模块之间要保持最小的必要联系。

  • Polymorphism

    多态。多态是指同一类的实例能够表现出多种不同的行为。这在面向对象编程中得到了充分体现。

  • Parametric Polymorphism

    多态参数。多态参数允许参数在运行时绑定,但到了编译时反而是静态的。这种特性可以让代码更加灵活,避免了硬编码的局限性。

  • Polymorphic Binding

    多态绑定。多态绑定是一种运行时绑定的机制。它允许客户端在运行时选择实现工厂或者选择正确的服务实现。

  • Double Polymorphism (Polymorphic Variance)

    双态差异。在这种情况下,父类和子类之间的类型差异会被自动通过参数推断,而非显式地进行类型检查控制。这种设计常用于枚举、协变、逆变等高度抽象的场景中。

  • 通过这些原则的指导,你可以避免陷入一些共同的大陷阱,从而提高代码的质量。这些原则不是用来 holy grail sort of things,而是为你提供了一种思维方式,一种看待问题的角度。

    总之,面向对象六大原则为我们提供了代码设计和维护的基本指导原则。通过理解和遵守这些原则,你可以构建出更高质量、更易维护的代码,同时也提高了你的代码的可扩展性和可维护性。

    上一篇:2025年04月02日AI领域重点关注焦点
    下一篇:Java基础学习总结(83)——Java泛型总结

    发表评论

    最新留言

    哈哈,博客排版真的漂亮呢~
    [***.90.31.176]2025年04月27日 10时56分51秒

    关于作者

        喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
    -- 愿君每日到此一游!

    推荐文章

    Leaflet 入门教程(四):文件加载( 10多种文件格式) 2023-01-30
    leaflet 综合教程150+ 【目录 】 2023-01-30
    leaflet+turf截取线上线段(leaflet篇.36) 2023-01-30
    Leaflet中使用draw绘制时获取图形的几何信息 2023-01-30
    Leaflet中使用layerGroup图层组实现图层切换 2023-01-30
    Leaflet中使用leaflet-cion-pulse插件实现波动的图标效果 2023-01-30
    Leaflet中使用Leaflet-echarts3插件实现航班航线动态模拟 2023-01-30
    Leaflet中使用leaflet-echarts插件实现Echarts的Migration迁徙图(带炫光特效) 2023-01-30
    Leaflet中使用Leaflet-MiniMap插件实现小地图效果 2023-01-30
    Leaflet中使用leaflet-sidebar插件实现侧边栏效果 2023-01-30
    Leaflet中使用leaflet.browser.print插件实现导出图片 2023-01-30
    Leaflet中使用leaflet.browser.print插件实现打印/导出为pdf 2023-01-30
    Leaflet中使用Leaflet.contextmenu插件实现地图上添加鼠标右键菜单 2023-01-30
    Leaflet中使用Leaflet.draw插件实现图形交互绘制和编辑(修改图形坐标点) 2023-01-30
    Leaflet中使用Leaflet.fullscreen插件实现全屏效果 2023-01-30
    Leaflet中使用Leaflet.MagnifyingGlass实现放大镜效果 2023-01-30
    Leaflet中使用Leaflet.Path.Transform插件实现旋转图形 2023-01-30
    Leaflet中使用Leaflet.Polyline.SnakeAnim插件实现水流模拟效果 2023-01-30
    Leaflet中使用Leaflet.Spin插件实现地图加载等待效果 2023-01-30
    Leaflet中使用markerCluster实现点聚合效果 2023-01-30