单例模式:饿汉式,懒汉式+工厂模式

Java单例模式说出来时,我觉得这东西学过了还不简单!结果,当我自己写时却感觉到有些手生,这应该是平时做的东西少的缘故。。。。

于是从网上查了一下,却也发现网上对这个问题说起来也是乱七八糟的,让我十分迷糊!

 

自己查了下资料。下面自己总结下吧,说错了希望大家指正!技术就是交流才能进步的!

 

模式中的单例模式分为:饿汉模式和懒汉模式。

顾名思义:

饿汉模式是对食物(Singleton)比较渴望的,所有一开始就new了一个来满足(食欲)

饿汉式:

 public class Singleton{
  private static Singleton singleton = new Singleton ();
  private Singleton (){}
  public static  Singleton getInstance(){return singletion;}
  } 

 

饿汉式在声明实例变量时不加final关键字,并且非正常使用时可能存在问题

如:Singleton s = Singleton.getInstance();
      s.executeMethod();
      s
= null; // 非正常使用
当另一个人使用时: 

Singleton s = Singleton.getInstance();
  s.executeMethod();
// throw a NullPointException


懒汉模式是对食物(Singleton)没兴趣或者懒得自己获取食物,直到饿的时候(用到的时候)才获取一个

 懒汉式:
  public class Singleton{
  private static Singleton singleton = null;
  public static synchronized synchronized getInstance(){
  if(singleton==null){
  singleton = new Singleton();
  }
  return singleton;
  }
  } 

 比较:
  饿汉式是线程安全的,在类创建的同时就已经创建好一个静态的对象供系统使用,以后不在改变
  懒汉式如果在创建实例对象时不加上synchronized则会导致对对象的访问不是线程安全的
  推荐使用第一种 

懒汉式没有加私有的构造函数
从实现方式来讲他们最大的区别就是懒汉式是延时加载,他在加载类时创建实例,而饿汉式在虚拟机启动的时候就会创建。

 

 ---------------------------------------------------------------------------------------------------------------------------------------------------

工厂模式按照《Java与模式》中的提法分为三类: 1. 简单工厂模式(Simple Factory) 2. 工厂方法模式(Factory Method) 3. 抽象工厂模式(Abstract Factory) 
这三种模式从上到下逐步抽象,并且更具一般性。所以我建议在这种情况下使用简单工厂模式与工厂方法模式相结合的方式来减少工厂类:即对于产品树上类似的种类(一般是树的叶子中互为兄弟的)使用简单工厂模式来实现。来看看抽象工厂模式的各个角色(和工厂方法的如出一辙): 抽象工厂角色:这是工厂方法模式的核心,它与应用程序无关。

工厂模式有三个参与者,抽象产品(Product)、工厂(Creator)和具体产品(ConcreteProduct)。客户只会看到工厂和抽象产品。 
//产品接口
public interface Product{ 
public String getName(); 
} 
//根据需求定制到指定产品接口
public class ConcreteProduct implements Product{ 
public String getName(){ 
return "产品1"; 
} 
} 
//使用产品
public class Creator{ 
public static Product create1(){ 
return new ConcreteProduct(); 
} 
} 

工厂模式的作用在于将创建具体产品的方法由工厂类控制,客户只需要知道产品的抽象类型

单例模式参考:http://topic.csdn.net/u/20071111/14/d9cbf766-765a-4315-a49f-be7888d1308b.html

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值