Java三种设计模式之单例模式、多例模式

单例设计模式:一个类只允许产生一个实例化对象。

(懒汉式存在多线程安全问题,而饿汉式不会)
单例和多例的共同特点

  1. 构造方法私有化。
  2. 类内部一定会提供一个static方法用于取得实例化对象
饿汉式单例模式

特点:构造方法私有化,外部无法产生新的实例化对象,只能通过private修饰的static方法取得实例化对象

 class Singleton{
     // 在类的内部可以访问私有结构,所以可以在类的内部产生实例化对象  
	//希望整体的操作之中只能够有一个实例化对象,所以加final
	 private  static final Singleton singleton=new Singleton();
	
	 //私有构造方法
	 private Singleton(){
		
	 }
	 public static Singleton getInstance(){
		 return singleton;
	 }
      public void print(){
	   System.out.println("hello");
     }
 }
 public class SingletonTest{
	 public static void main(String[] args){
		 //声明对象
		 Singleton singleton=null;
		 singleton=Singleton.getInstance();
		 singleton.print();
	 }
 }																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																																				
懒汉式单例模式

特点:当第一次去使用Singleton对象的时候才会为其产生实例化对象的操作

 class Singleton{
     // 在类的内部可以访问私有结构,所以可以在类的内部产生实例化对象  
	
	 private static Singleton singleton;
	
	 //私有构造方法
	 private Singleton(){
		
	 }
	 public static Singleton getInstance(){
		 if(singleton==null){//表示此时未实例化
			 singleton=new Singleton();
		 }	
		 return singleton;
	 }
      public void print(){
	   System.out.println("hello");
     }
 }
 public class SingletonTest{
	 public static void main(String[] args){
		 //声明对象
		 Singleton singleton=null;
		 singleton=Singleton.getInstance();
		 singleton.print();
	 }
 }

instance = new Singleton()并非是一个原子操作,事实上在 JVM 中这句话大概做了下面 3 件事情。 给 instance 分配内存 ,调用 Singleton 的构造函数来初始化成员变量, 将instance对象指向分配的内存空间

class Singleton{ 
// 确保产生的对象完整性 
private volatile static Singleton instance = null; 
private Singleton() {} 
public static Singleton getInstance() {
	if(instance==null) { 
	// 检查对象是否初始化 
		synchronized (Singleton.class) {
			 if(instance==null) 
			 // 确保多线程情况下对象只有一个
			  instance = new Singleton();
	   } 
   }
   return instance;
  } 
}
多例设计模式

多例只是比单例追加了更多个内部实例化对象产生。构造方法私有化,类内部需要提供若干个实例化对象,后面通过static方法返回

 //性别多例
 class  Sex{
	 private String title;
	 public static final int M=1;
	 public static final int F=2;
	 private static final Sex MALE=new Sex("男");
	 private static final Sex FEMALE=new Sex("女");
	 private Sex(String title){
		 this.title=title;
	 }
      public static Sex getInstance(int flag){
		  switch(flag){
			  case M: 
			       return MALE;
			  case F: 
			       return FEMALE;
			  default:
			       return null;	
		  }
	 }
	 public String toString(){
		 return this.title;
	 }	
 }
 public class SingletonTest{
	 public static void main(String[] args){
		 Sex sex=Sex.getInstance(Sex.M);
		 System.out.println(sex);
	 }	
 }
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值