封裝以減少耦合

封裝允許你對類進行內部更改,而不會影響呼叫該類的任何程式碼。這減少了耦合,或者任何給定的類依賴於另一個類的實現。

例如,讓我們改變前一個例子中 Angle 類的實現:

public class Angle {
    
    private double angleInDegrees;
    
    public static Angle angleFromDegrees(double degrees){
        Angle a = new Angle();
        a.angleInDegrees = degrees;
        return a;
    }
    
    public static Angle angleFromRadians(double radians){
        Angle a = new Angle();
        a.angleInDegrees = radians*180/Math.PI;
        return a;
    }
    
    public double getDegrees(){
        return angleInDegrees;
    }
    
    public double getRadians(){
        return angleInDegrees*Math.PI / 180;
    }
    
    public void setDegrees(double degrees){
        this.angleInDegrees = degrees;
    }
    
    public void setRadians(double radians){
        this.angleInDegrees = radians*180/Math.PI;
    }

    private Angle(){}
}

此類的實現已更改,因此它僅儲存角度的一個表示,並在需要時計算另一個角度。

但是,實現發生了變化,但介面卻沒有。如果一個呼叫類依賴於訪問 angleInRadians 方法,則需要將其更改為使用新版本的 Angle。呼叫類不應該關心類的內部表示。