- 多例模式的目的是限制本类的实例化的产生个数。
单例模式与之类似,代码如下
class Color {
private static final Color RED = new Color("RED");
private static final Color GREEN = new Color("GREEN");
private static final Color BLUE = new Color("BLUE");
private String title;
private Color(String title) {
this.title = title;
}
public static Color getInstance(int ch) {
switch (ch) {
case 0: return RED;
case 1: return GREEN;
case 2: return BLUE;
default: return RED;
}
}
}
public class test {
public static void main(String [] args) {
Color color = Color.getInstance(2);
}
}
只能通过getInstance();方法来获取实例。
2.枚举
有了枚举之后:
enum Color {
RED,GREEN,BLUE
}
public class test {
public static void main(String [] args) {
System.out.println(Color.GREEN);
}
}
这样就很简单了。枚举就是一种高级的多例设计模式。
3.枚举方法:
Enum类 和 enum 类似于 int 和Integer的关系吧?可能是这样.Enum类有几个方法。
enum是一个关键字,使用enum定义的枚举本质上就相当于一个类本质上继承了Enum抽象类而已。
enum Color {
RED,GREEN,BLUE
}
public class test {
public static void main(String [] args) {
System.out.println(Color.GREEN.ordinal() +"="+ Color.GREEN.name());
}
}
ordinal()枚举中属性的序号。
name()枚举中属性的名字。
除此之外还有一个方法可以获取枚举的对象数组例如
enum Color {
RED,GREEN,BLUE
}
public class test {
public static void main(String [] args) {
for (Color temp : Color.values()) {
System.out.println(temp.ordinal() +"=" + temp.name());
}
}
}
这里延伸到int 和 Integer ,
1、Integer是int的包装类,int则是java的一种基本数据类型
2、Integer变量必须实例化后才能使用,而int变量不需要
3、Integer实际是对象的引用,当new一个Integer时,实际上是生成一个指针指向此对象;而int则是直接存储数据值
4、Integer的默认值是null,int的默认值是0
5.对于两个非new生成的Integer对象,进行比较时,如果两个变量的值在区间-128到127之间,则比较结果为true,如果两个变量的值不在此区间,则比较结果为false
6.由于Integer变量实际上是对一个Integer对象的引用,所以两个通过new生成的Integer变量永远是不相等的(因为new生成的是两个对象,其内存地址不同)。
7.Integer变量和int变量比较时,只要两个变量的值是向等的,则结果为true(因为包装类Integer和基本数据类型int比较时,java会自动拆包装为int,然后进行比较,实际上就变为两个int变量的比较)
8.非new生成的Integer变量和new Integer()生成的变量比较时,结果为false。(因为非new生成的Integer变量指向的是java常量池中的对象,而new Integer()生成的变量指向堆中新建的对象,两者在内存中的地址不同)