设计模式(Java)—Singleton模式
程序员文章站
2024-03-17 22:57:40
...
Single模式必须满足的条件:
1.确保任何情况下都绝对只有1个实例
2.在程序上表现出“只存在一个实例”
示例程序:
Singleton类:
package Singleton;
//单例模式
public class Singleton {
//private限定外界不能访问到该变量,static限定该变量属于类变量
private static Singleton singleton = new Singleton();
//构造函数私有化限定了该类实例只能由getInstance方法创建,不能通过外部方法创建
private Singleton() {
// TODO Auto-generated constructor stub
System.out.println("生成了一个实例");
}
//提供给外界用来获取实例的接口方法,static确保只能获取到一个且唯一一个实例
public static Singleton getInstance(){
return singleton;
}
}
Main类:
package Singleton;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("Start");
//通过类的静态方法创建实例
Singleton singleton1 = Singleton.getInstance();
Singleton singleton2 = Singleton.getInstance();
if(singleton1==singleton2){
System.out.println("两个实例是同一个实例");
}else{
System.out.println("两个实例不是同一个实例");
}
System.out.println("End.");
}
}
Singleton类定义了static字段(类的成员变量)singleton,并将其初始化为Singleton类的实例。初始化行为仅在该类被加载时进行一次。
Singleton类的构造函数是private的,这是为了禁止从Singleton类外部调用构造函数。Singleton模式的作用在于可以确保任何情况下都只能生成一个实例。为了达到这个目的,必须设置构造函数为private。
程序运行后,在第一次调用getInstance方法时,Singleton类会被初始化,也就是这个时候。static字段singleton被初始化,生成了唯一的一个实例。
习题:
TicketMaker类:
package SingleTicket;
public class TicketMaker {
private int ticket = 100;
//类变量
private static TicketMaker ticketMaker = new TicketMaker();
//私有的构造函数
private TicketMaker(){}
//公共的静态的接口方法
public static TicketMaker getInstance(){
return ticketMaker;
}
//synchronized,适用于多线程
public synchronized int getNextNumber(){
return ticket++;
}
}
Main类:
package SingleTicket;
public class Main {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("Start...");
for(int i=0;i<9;i++){
System.out.println(TicketMaker.getInstance().getNextNumber());
}
System.out.println("End...");
}
}
上一篇: 面试算法