单例模式

大学里面设计模式放在大四才学,而大四大家都在外面实习,所以这样的课基本等于没上。

现在毕业了才回来补以前没学好的内容。敲打敲打敲打

class Singleton {
  private static Singleton instance=null;
  private Singleton(){}
  public static Singleton getInstance() {
      if(instance==null)
      instance=new Singleton();
      return instance;
  }
}
先来分析一下单例模式的特点:

1.该类只有一个实例

2.该类必须自行创建这个实例,而不能在外部创建

3.它必须向外暴露一个获取实例的方法

基于以上几个特点,下面一一分析。

1.该类只有一个实例,所以这个类不能通过普通的创建对象的方法new 来创建。也就是说它的构造函数必须是private,那么外部就无法访问了。

即:private Singleton(){},不可以是public,否则可以new Singleton();

2.该类必须自行创建自身的实例,所以必须在Singleton内部定义一个Singleton对象。必须为private,否则外部可以直接访问instance对象。

3.通过public static getInstance方法获得对象。getInstance方法为什么是静态的?因为不能通过new 来创建当前对象。instance为什么也是静态的?因为静态方法引用的对象必须是静态对象。


下面是Android项目实际开发过程中遇到的单例模式。这个是一个图片缓存类。

一个线程池不会反复去创建的,需要使用单例。getInstance中引用到的所有变量都是static的。

class ImageCache {
	private static final int CORE_POOL_SIZE = 5;
	private static final int MAXIMUM_POOL_SIZE = 128;
	private static final int KEEP_ALIVE = 10;
	private static final BlockingQueue<Runnable> sWorkQueue = new LinkedBlockingQueue<Runnable>();
	private static ThreadPoolExecutor sExecutor;
	private static final ThreadFactory sThreadFactory = new ThreadFactory() {
		private final AtomicInteger mCount = new AtomicInteger(1);

		public Thread newThread(Runnable r) {
			return new Thread(r, "MulDownLoadImage #" + mCount.getAndIncrement());
		}
	};

	private ImageCache() {
	}

	public static ImageCache getInstance() {
		if (imageCache == null) {
			imageCache = new ImageCache();
			sExecutor = new ThreadPoolExecutor(CORE_POOL_SIZE, MAXIMUM_POOL_SIZE, KEEP_ALIVE, TimeUnit.SECONDS,
					sWorkQueue, sThreadFactory, new ThreadPoolExecutor.DiscardOldestPolicy());
		}
		return imageCache;
	}
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值