单例设计:
在很多情况下有些类是不需要重复产生对象的。例如:Windows回收站。全局共享同一个回收站程序。
特点:构造方法私有化。类内部提供static方法获取实例化对象。
class Singleton{
private static final Singleton INSTANCE = new Singleton();
private Singleton() {}
public static Singleton getIntance() {
return INSTANCE;
}
public void print() {
System.out.println("test");
}
}
public class FirstJava {
public static void main(String[] args) {
Singleton st = Singleton.getIntance();
st.print();
}
}
单例模式分类两种,一种是在系统加载Singleton类的时候自动提供实例化对象(如上),另一种是在第一次使用的时候进行实例化对象处理(如下)。
class Singleton{
private static Singleton INSTANCE;
private Singleton() {}
public static Singleton getIntance() {
if(INSTANCE == null){
instance = new Singleton();
}
return INSTANCE;
}
public void print() {
System.out.println("test");
}
}
public class FirstJava {
public static void main(String[] args) {
Singleton st = Singleton.getIntance();
st.print();
}
}
多例设计
与单例设计对应,单例设计指的是只保留一个实例化对象,多例设计设计可以保留多个实例化对象。
例如:如果定义一个描述性别的类,对象只有两个,男/女。
class Gender{
private String title;
private static final Gender male = new Gender("男");
private static final Gender female = new Gender("女");
private Gender(String title) {
this.title = title;
}
public static Gender getGender(String title) {
switch(title) {
case "male":return male;
case "female":return female;
default:return null;
}
}
public void print() {
System.out.println(title);
}
}
public class FirstJava {
public static void main(String[] args) {
Gender g = Gender.getGender("male");
g.print();
}
}
多例设计与单例设计本质相同。