常量接口模式

在一个软件系统中会使用一些常量,一种流行的做法是把相关的常量放在一个专门的常量接口中定义,例如:

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中的静态常量。

时间: 2024-12-28 18:04:59

常量接口模式的相关文章

标识类型模式和常量接口模式

标识类型模式 定义一个不包含任何方法的接口,用它仅仅来表示一种抽象类型.所有实现该接口的类意味着属于这种类型. 比如定义一个Food接口,其中不包含任何方法: public interface Food{}//实现该接口的类都是食物类型 鱼肉: public class Fish implements Food{...} 进食方法: public void eat(Food food){...} 进食: Food fish = new Fish();//Fish实现了Food接口,标识其食物类型

与接口相关的设计模式(2):代理模式、标识类型模式及常量接口模式

在上文与接口相关的设计模式(1)中,详细介绍了定制服务模式和适配器模式,下面我们来看第三种与接口相关的模式:代理模式. 代理模式 定义:为对象提供一种代理,以控制对这个对象的访问. 分类: 远程代理(Remote Proxy)-为不同地理的对象提供局域网代表对象.(类似于客户端和服务器端) 虚拟代理(Virtual Proxy)-根据需要将资源消耗很大的对象进行延迟,真正需要的时候才进行创建.(网页中图片的加载,先用一张虚拟的图片进行显示,等图片加载完成后再进行显示) 保护代理(Protect

Dell poweredge r210进BIOS修改磁盘控制器(SATA Controller)接口模式

开机后按F2键进入BIOS设置,如下图: BIOS设置主界面: 使用上下键移动光标到"SATA Controller"上,按回车键进入接口模式设置. 使用上下键移动光标到"SATA Controller"上,使用左右键可以修改接口模式,包括的可选项:Off,ATA Mode,AHCI Mode,RAID Mode. 设置完成后按Esc键,保存并退出. 注意:退出之后重新启动加载配置项时,会提示用户确认是否修改,这时需要连续按两次Y键确认,如下图: 版权声明:本文为博

Cisco交换机接口模式精解

cisco网络中,交换机在局域网中最终稳定状态的接口类型主要有四种:access/ trunk/ multi/ dot1q-tunnel. 1.access: 主要用来接入终端设备,如PC机.服务器.打印服务器等. 2.trunk: 主要用在连接其它交换机,以便在线路上承载多个vlan. 3.multi: 在一个线路中承载多个vlan,但不像trunk,它不对承载的数据打标签.主要用于接入支持多vlan的服务器或者一些网络分析设备.现在基本不使用此类接口,在cisco的网络设备中,也基本不支持此

华为交换机私有hybird接口模式:(案例+原理详解)

华为交换机私有hybird接口模式:(案例+原理详解) 实验说明: 准备:如图pc1 pc2同属于VLAN10,配置相应的ippc3 pc4同属于VLAN20 配置相应的ipClient 属于 VLAN30 配置pc1同网段ipPc1 pc2 client 属于同网段但是不同VLAN 交换机分别新建VLAN 10 20 30 目的:实现VLAN间相互通信,VLAN10 VLAN20不能相互访问,VLAN10 VLAN30可以相互访问.过程步骤: 实现同VLAN间通信:a) Pc1数据收发过程:p

Elasticsearch 集群管理工具curator 接口模式使用介绍

安装配置参考文档:http://blog.51cto.com/michaelkang/2333586 curator 接口模式使用介绍 curator的命令行语法如下: curator [--config CONFIG.YML] [--dry-run] ACTION_FILE.YML --config : 之后跟上配置文件 --dry-run :调试参数,测试脚本运行是否正常: ACTION_FILE.YML :action文件中可以包含一连串的action,curator接口集中式的confi

Java 接口常量反模式及如何定义 Java 常量

初学 Java 的人很不经意间就会把常量定义在接口中,大概唯一的理由是接口不能实例化,而使用接口中定义的常量也是不用附着在实例上的.这主要还是 JDK 本身给我们做了很多这样的榜样, 如  java.io.ObjectStreamConstans,多是出现在 Enum 类型到来之前. 其实 Java 的接口常量是一种反模式,理由如下: 1. 接口是不能阻止被实现或继承的,也就是说子接口或实现中是能够覆盖掉常量的定义,这样通过父,子接口(或实现) 去引用常量是可能不一致的2. 同样的,由于被实现或

《Java设计模式》之接口模式

-----------模式是思想的体现,而非具体的实现. 抽象的讲,类的接口是类允许其他类对象访问的方法与字段集.接口通常代表一种承诺,即方法需要实现接口方法名表示的操作,遵循代码注释和其他文档说明,类的实现就是方法体中的代码. java不允许多重继承,也就是说一个子类只能有一个父类,Son extends FatherA,FatherB 是错误的为了弥补这点不足,java允许实现多个接口, 接口就是给出一些没有内容的方法,类似于C++中的虚类.到具体用的时候再由用的方法自己定义内容,要注意的是

接口模式

虽然接口中可以定义常量:public static final String str="123"; 但jdk1.5[加入了enum]以后不建议这样做; 适用不同场景模式: 适配类的接口以匹配客户端期待的接口---适配模式, 为一组类提供一个简单的接口---外观模式, 为单个对象与复合对象提供统一的接口---合成模式, 解除抽象与实现之间的耦合,使二者能够独立的演化---桥接模式; 例如,某个类实现了我们需要的服务,但是方法名与客户端期待的不符,这时就需要适配器模式. 适配器模式的意义在