跳转至

封装字段

  • 问题


    您有一个公共的字段。

    class Person {
      public String name;
    }
    
  • 解决方法


    将字段设为私有并为其创建访问方法。

    class Person {
      private String name;
    
      public String getName() {
        return name;
      }
      public void setName(String arg) {
        name = arg;
      }
    }
    

为什么重构?

面向对象编程的支柱之一是封装,即隐藏对象数据的能力。否则,所有对象都将是公共的,其他对象可以获取和修改您对象的数据,而无需任何制衡!数据与该数据相关的行为分离,程序部分的模块化受到损害,并且维护变得复杂。

如果组件的数据和行为紧密相关并且位于代码中的同一位置,那么您维护和开发该组件就会容易得多。

您还可以执行与访问对象字段相关的复杂操作。

在某些情况下,出于性能考虑,封装是不明智的。这些情况很少见,但一旦发生,这种情况就非常重要了。

假设您有一个图形编辑器,其中包含具有 x 和 y 坐标的对象。这些领域未来不太可能改变。更重要的是,该程序涉及大量存在这些字段的不同对象。因此,直接访问坐标字段可以节省大量的 CPU 周期,否则这些周期将被调用访问方法占用。Java 中的 Point 类就是这种不寻常情况的一个例子。该类的所有字段都是公共的。

如何重构?

  1. 为该字段创建 getter 和 setter。
  2. 查找该字段的所有调用。用 getter 替换字段值的接收,用 setter 替换新字段值的设置。
  3. 替换所有字段调用后,将字段设为私有。

Tip

封装字段只是将数据和涉及该数据的行为更紧密地结合在一起的第一步。在为访问字段创建简单方法后,您应该重新检查调用这些方法的位置。这些区域中的代码很可能在访问方法中看起来更合适。