什么是Singleton Pattern?
单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。
Singleton Pattern 动机
对于系统中的某些类来说,只有一个实例很重要,例如,一个系统中可以存在多个打印任务,但是只能有一个正在工作的任务;一个系统只能有一个窗口管理器或文件系统;一个系统只能有一个计时工具或ID(序号)生成器。如在Windows中就只能打开一个任务管理器。如果不使用机制对窗口对象进行唯一化,将弹出多个窗口,如果这些窗口显示的内容完全一致,则是重复对象,浪费内存资源;如果这些窗口显示的内容不一致,则意味着在某一瞬间系统有多个状态,与实际不符,也会给用户带来误解,不知道哪一个才是真实的状态。因此有时确保系统中某个对象的唯一性即一个类只能有一个实例非常重要
Singleton Pattern 特点
单例模式的三个特点:
1,该类只有一个实例
2,该类自行创建该实例(在该类内部创建自身的实例对象)
3,向整个系统公开这个实例接口
Singleton Pattern 图示
Singleton Pattern 实现
1.经典单例模式实现
1.当然第一步创建一个单利类
//创建一个单例类
public class Singleton{
}
2.单例模式的要求之一就是只有一个子类,让然不能给外界使用构造器了
//1如何做到不让这个类只有一个实例?--首先把构造器访问权限设为private
private Singleton(){
//里面我爱做什么是我的事情
}
3.构造器都没了你让我怎么创建实例?--你不用创建~我给你就行
public static Singleton getInstance(){
return new Singleton();
}
4.可是这样我想要几个调用几次,这就是你说的单例?--没有,工作还没弄到一半呢,基本原则就是我创建好了给你,
而且是创建唯一一个实例,还是你需要时候我才创建给你。先在类里面生命个对象
//6.我里面声明一个对象,先不new,在方法里面new,当然是要设为static的
private static Singleton uniqueInstance=null;//uniqueInstance表示独一无二的实例
5.然后咱在修改方法
public static Singleton getInstance(){
//return new Singleton();//4.那你每次调用这个都可以得到新的实例,没区别了啊
//5.当然不能直接返回咯,加以个判断条件,我就创建一个唯一实例给你
//7.判断调用,第一次调用当然为对象当然为null,那我new一个给你
if(uniqueInstance==null){
uniqueInstance=new Singleton();
}
//8.如果第一次上面就自动new一个,第二次到第n次,我就返回之前那个给你
return uniqueInstance;
}
6.这样是不是就可以实现单例模式了?我们测试一下吧
public static void main(String[] args){
//9.测试是不是同一个类
Singleton my=Singleton.getInstance();
Singleton your=Singleton.getInstance();
if(my==your){
System.out.println("my 和 your 指向同一个对象空间!");
//输出了:my 和 your 指向同一个对象空间!
}
}
7.这样就可以实现单例模式了!完整代码
//经典的单例模式(Singleton pattern)
package me.singleton;
//创建一个单例类
public class Singleton{
//6.我里面声明一个对象,先不new,在方法里面new,当然是要设为static的
private static Singleton uniqueInstance=null;//uniqueInstance表示独一无二的实例
//1如何做到不让这个类只有一个实例?--首先把构造器访问权限设为private
private Singleton(){
//里面我爱做什么是我的事情
}
//2.把构造都设为private了,那你怎么得到对象?--暴露个方法给你咯
public static Singleton getInstance(){
//return new Singleton();//4.那你每次调用这个都可以得到新的实例,没区别了啊
//5.当然不能直接返回咯,加以个判断条件,我就创建一个唯一实例给你
//7.判断调用,第一次调用当然为对象当然为null,那我new一个给你
if(uniqueInstance==null){
uniqueInstance=new Singleton();
}
//8.如果第一次上面就自动new一个,第二次到第n次,我就返回之前那个给你
return uniqueInstance;
}
public static void main(String[] args){
//9.测试是不是同一个类
Singleton my=Singleton.getInstance();
Singleton your=Singleton.getInstance();
if(my==your){
System.out.println("my 和 your 指向同一个对象空间!");
//输出了:my 和 your 指向同一个对象空间!
}
}
}
分享到:
相关推荐
java Singleton单例模式 java Singleton单例模式
Singleton pattern单例模式应用
Java面向对象(高级)-- 单例(Singleton)设计模式
单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 这种模式涉及到一个单一的类,该类负责创建自己的对象,同时确保只有单个...
36种最新设计模式整理 Design Pattern: Simple Factory 模式 Design Pattern: Abstract Factory 模式 Design Pattern: Builder 模式 Design Pattern: Factory Method 模式 Design Pattern: Prototype 模式 ...
C#视频-面向对象设计模式纵横谈(2):Singleton 单件(创建型模式)
设计模式总结-模板设计模式,单例模式(singleTon)
简单的单例模式举例Singleton 分为恶汉式 懒汉式
NULL 博文链接:https://linxingliang.iteye.com/blog/1217811
李建忠面向对象设计模式视频精讲:Singleton 单件(创建型模式)
设计模式系列之01-单例模式(Singleton模式),很好的资源,理论实践结合讲述,逐步更新
4、单例模式(Singleton Pattern) 用意:仅允许生成一个对象时
设计模式C++学习之单例模式(Singleton)
Singleton模式包含的角色只有一个,就是Singleton。Singleton拥有一个私有构造函数,确保用户无法通过new直接实例化它。除此之外,该模式中包含一个静态私有成员变量instance与静态公有方法Instance()。Instance()...
Singleton是一种创建型设计模式,定义如下: “确保一个类只有一次实例,并为其提供一个全局访问点。” -- E. Gamma 等。 设计模式:可重用的面向对象软件的元素。 韦斯特福德:艾迪生-韦斯利,1995 年。 fw::...
此示例展示了Qml 的单例模式(类似全局对象,只生成一次实例,可全局使用) surfsky.cnblogs.com
在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在。这样有几个好处: 1、某些类创建比较频繁,对于一些大型的对象,这可以节省一笔很大的系统开销。 2、省去了new操作符,降低了系统内存的使用频率...
单例模式(Singleton Pattern)是 Java 中最常见的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。
单例模式(Singleton Pattern)是 Java 中最简单的设计模式之一。这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式。 学习demo
C#设计模式(7)-Singleton Pattern C#设计模式(6)-Abstract Factory Pattern C#设计模式(5)-Factory Method Pattern C#设计模式(4)-Simple Factory Pattern C#设计模式(3) - 设计原则(2) C#设计模式(2...