编程开发中为什么要用到单例模式?
单例模式的存在,一则,解决多线程并发访问的问题。二则节约系统内存,提交系统运行的效率,提高系统性能。
单例模式的代码:
1 public class Printer { 2 private static Printer printer =null;//创建一个私有的全局变量 3 /* 4 * 如果有多线程并发访问时,上锁,让其排队等候,一次只能一人用。 5 */ 6 public static synchronized Printer getPrinter(){ 7 if(printer==null){//如果为空,创建本实例 8 printer = new Printer(); 9 } 10 return printer; 11 } 12 /* 13 * 构造私有化,保证在系统的使用中,只有一个实例 14 */ 15 private Printer(){ 16 17 } 18 }
从代码上来分析,单例模式,首先向外提供了一个可被访问的实例化的对象,如果没有此对象时,该printer类创建一个。如果遇到多线程并发访问,加上关键字Synchronized,上锁让没有持有该对象的类处于等待状态。当前持有该printer的线程任务结束之后,处于等待中的线程才能逐个去持有该实例,去操作其方法。这样的一个过程 在编程中被称为单例模式。
如果在系统中不使用单例模式的话,在碰到多线程访问的时候,printer就会给要请求的类,分别在内存中new出一个printer对象,让这些请求的类去做print方法。这样大量占有内存,就会导致系统运行变慢,像电脑的CPU一样,占有量极高,电脑卡死不动的感觉。因为系统的硬件设施需求变动量小,所以只能想出一个节约成本 的方法就是,单例模式,让多线程处于等待的状态,一个 一个的去解决,这样,即节约内存,提交了运行的成本。也就是单例存在的意义。