zoukankan      html  css  js  c++  java
  • 单例模式

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

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

    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;
    	}
    }



  • 相关阅读:
    卷积神经网络(Convolutional Neural Network,CNN)
    理解滑动平均(exponential moving average)
    python2到python3代码转化:2to3
    Mac查看和杀死后台进程
    pip安装python库时使用国内镜像资源加速下载过程
    关于pip安装时提示"pkg_resources.DistributionNotFound"错误
    【Linux基础】压缩和解压
    【Linux基础】常用Linux命令: cd, cp, ls, mkdir, mv, rm, su, uname
    【python3基础】相对路径,‘/’,‘./’,‘../’
    剑指offer-学习笔记
  • 原文地址:https://www.cnblogs.com/ameryzhu/p/6555630.html
Copyright © 2011-2022 走看看