博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
设计模式(一)---单例模式
阅读量:5788 次
发布时间:2019-06-18

本文共 1987 字,大约阅读时间需要 6 分钟。

单例模式

 英文名称:(Singleton Pattern)

 定义:确保某一个类仅仅用一个实例,并且自行实例化并向整个系统提供这个实例

UML图:

public class SingletonTest {	public static void main(String[] args) {		//通过Singleton对外暴漏的方法。进行实例化。并保证仅仅有一个实例		Singleton single = Singleton.getInstance();		System.out.println(single.toString());	}}//又称饿汉式单例模式class Singleton{	private static final Singleton single = new Singleton();	private Singleton(){			}	public static Singleton getInstance(){		return single;	}}//又称懒汉式单例模式//懒汉式单例模式在遇到高并发情况,系统有压力增大。可能会出现多个实例的对象。 class Singleton1{	private static Singleton1 single = null;	private Singleton1(){			}	public static Singleton1 getInstance(){		if(single==null){			synchronized (Singleton1.class) {   //				if(single==null){					single = new Singleton1();				}			}		}		return single;	}}

(依照书本上的总结,自己理解并不太深刻。。)

 单例模式的长处:

  1、单例模式内存中仅仅有一个实例,降低内存开支,一个对象须要频繁的创建和销毁。

使用单例模式具有非常大的优势。

  2、单例仅仅生成一个实例,降低系统的性能开销。
  3、单例模式能够在避免对资源的多重占用。
  4、单例模式能够在系统设置全局的訪问点。优化和共享资源訪问。
  单例模式的缺点:
  1、单例模式一般没有接口,扩展非常困难。
  2、单例对測试不利
  3、单例与单一职责原则有冲突。
 
  单例的使用场景:
  1、要求生成唯一序列号的环境
  2、在整个项目中须要一个共享訪问点或訪问数据
  3、创建一个对象须要消耗的资源过多
  4、须要定义大量的静态常量和静态方法。

单例的拓展

  通过单例的拓展,让类仅仅产生两个或者多个实例对象。

UML图

public class EmperorTest {	public static void main(String[] args) {		for(int i=0;i<5;i++){			//获取Emperor对象的实例			Emperor e = Emperor.getEmperor();			e.say();		}	}}class Emperor{	//定义一个list集合。用来存放对象的实例	private static List
listEmperor = new ArrayList
(); private static int maxNum = 2; //定义一个list集合,为创建的对象设置编号。

private static List<String> listNumofEmperor = new ArrayList<String>(); //表示当前编号 private static int currentNum = 0; //创建出全部的对象 static{ for(int i=0;i<maxNum;i++) listEmperor.add(new Emperor("实例化.."+(i+1)+"..对象")); } private Emperor(String name){ listNumofEmperor.add(name); } public static Emperor getEmperor(){ Random random = new Random(); currentNum = random.nextInt(maxNum); return listEmperor.get(currentNum); } public void say(){ System.out.println(listNumofEmperor.get(currentNum)); } }

转载于:https://www.cnblogs.com/clnchanpin/p/6727692.html

你可能感兴趣的文章
软件评测-信息安全-应用安全-资源控制-用户登录限制(上)
查看>>
我的友情链接
查看>>
Java Web Application 自架构 一 注解化配置
查看>>
如何 debug Proxy.pac文件
查看>>
Python 学习笔记 - 面向对象(特殊成员)
查看>>
Kubernetes 1.11 手动安装并启用ipvs
查看>>
Puppet 配置管理工具安装
查看>>
Bug多,也别乱来,别被Bug主导了开发
查看>>
sed 替换基础使用
查看>>
高性能的MySQL(5)创建高性能的索引一B-Tree索引
查看>>
oracle备份与恢复--rman
查看>>
图片变形的抗锯齿处理方法
查看>>
Effective C++ Item 32 确保你的 public 继承模子里出来 is-a 关联
查看>>
phpstorm安装laravel-ide-helper实现自动完成、代码提示和跟踪
查看>>
python udp编程实例
查看>>
TortoiseSVN中图标的含义
查看>>
Tasks and Back stack 详解
查看>>
关于EXPORT_SYMBOL的作用浅析
查看>>
成功的背后!(给所有IT人)
查看>>
在SpringMVC利用MockMvc进行单元测试
查看>>