常量接口模式


在一個軟件系統中會使用一些常量,一種流行的做法是把相關的常量放在一個專門的常量接口中定義,例如:

package com.FinalInterface;

public interface MyConstants {
    public static final double MATH_PI = 3.1415926;
    public static final double MATH_E = 2.71828;

}

以下Circle類需要訪問以上MATH_PI常量,一種方式是采用"My-Constants.MATH_PI"的形式,如下:

package com.FinalInterface;

public class Circle {
    private double r;//半徑
    public Circle(double r){
        this.r = r;
    }
    public double getCircumference(){
        return 2 * r * MyConstants.MATH_PI;
    }
}

還有一種方式是讓Circle類中實現MyConstants接口,如下:

inport mypack.myConstants;
public class Circle inplenments MyConstants{
     private double r;
     public Circle (double r){this.rar;}
     public double getCircumference () {return *2 * r * MATH_PI;}
     public double getArea(){return r*r * MATH_PI;}
}

 

第二種方式使得Circle類繼承了MyConstants接口的常量,可以在程序中直接引用常量名,但這種方式違背了面向對象的封裝思想,MATH_PI常量是Circle類的實現細節的一部分,僅僅在計算圓周長和圓面積是才會用到,沒有必要向外界公開MATH_PI常量.這其實是一種向外界泄露實現的行為,會絮兒系統的可維護性. 在JDK1.5中因為了 import static 語句,它允許類直接訪問另一個接口B或類B中的靜態常量,而不必指定接口B或類B的名字,而且類A無須實現接口B或者繼承類B。如下:

package com.FinalInterface;
import static com.FinalInterface.MyConstants.*;
public class Circle {
    private double r;//半徑
    public Circle(double r){
        this.r = r;
    }
    public double getCircumference(){
        return 2 * r * MATH_PI;
    }
}

 import static 語句既可以簡化編程,又能防止Circle類繼承並公開MyConstants中的靜態常量。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM