笔记:Java中的单例设计模式

之前接触过单例模式,当初不明白这样的设计用意,今天特地研究了下java中的单例设计模式的用处及用法。

单例模式:单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。一个类有且仅有一个实例,并且自行实例化向整个系统提供。

单例模式的用处:一个系统中可以存在多个打印任务,但是只能有一个正在工作的任务;一个系统只能有一个窗口管理器或文件系统;一个系统只能有一个计时工具或ID(序号)生成器。如在Windows中就只能打开一个任务管理器。如果不使用机制对窗口对象进行唯一化,将弹出多个窗口,如果这些窗口显示的内容完全一致,则是重复对象,浪费内存资源;如果这些窗口显示的内容不一致,则意味着在某一瞬间系统有多个状态,与实际不符,也会给用户带来误解,不知道哪一个才是真实的状态。因此有时确保系统中某个对象的唯一性即一个类只能有一个实例非常重要。http://baike.baidu.com/view/1859857.htm

例子代码如下:

public class TestSingleMode {

public static void main(String[] args) {
  
                        Singleton s1 = null ;//创建对象s1
                        Singleton s2 = null ;//创建对象s2
                        s1 = Singleton.getInstance() ;//把类中的实例化对象传递给s1
                        s1.print() ; //调用print方法打印输出
                        s2 = Singleton.getInstance() ;//把类中的实例化对象传递给s2
                        s2.print() ; //调用print方法打印输出
   
                        s2.setName("jack");
                        s2.setAge(2);
   
                        s1.print();
                         }
                }

class Singleton  {//定义Singleton类

//在类的内部用静态实例化对象并私有化
                     private static Singleton instance = new Singleton() ;
                 //用静态方式定义getter方法取回instance对象
                     public static Singleton getInstance(){
                          return instance ;
                     }
                     private String name ; //定义name属性
                     private int age ;  //定义age属性
                     private Singleton(){} //无参构造 并私有化
                     public void setName(String name){ //setter方法
                          this.name = name ;
                     }    
                     public String getName(){ //getter方法
                          return this.name ;
                     }
                     public void setAge(int age){//setter方法
                          this.age = age ;
                     }
                     public int getAge(){ //getter方法
                          return this.age ;
                     }
                     public void print(){ //定义一个打印输出的方法
                          System.out.println("姓名:" + getName() + "年龄:" + getAge()) ;
                     }
                }

运行结果:

姓名:null年龄:0
                    姓名:null年龄:0
                    姓名:jack年龄:2

总结:s1 与 s2 指向同一对象,当修改s2的值时,s1的值也会改变。

笔记:Java中的单例设计模式

时间: 2024-12-23 07:18:34

笔记:Java中的单例设计模式的相关文章

Java中的单例设计模式举例

本例中通过将构造函数私有化的方式将实例化对象的代码放到类内部的静态函数中,从而实现单例设计模式. class Singleton { static Singleton instance = new Singleton(); private Singleton() { } public static Singleton getInstance() { return Singleton.instance; } public void func() { System.out.println("Hi t

java中的单例设计模式

一.饿汉式,线程安全的. package com.cal; public class SingleTon { //1.私有的构造方法,不应许new对象 private SingleTon(){} //2.自己提供一个私有的静态对象 private static SingleTon instance = new SingleTon(); //3.给外部提供一个公共的静态方法 public static SingleTon getInstance(){ return instance; }} 二.懒

iOS 中的单例设计模式

单例设计模式:在它的核心结构中只包含一个被称为单例类的特殊类.例如文件管理中的NSUserDefault,应用程序中的UIApplication,整个应用程序就这一个单例类,负责应用程序的一些操作,单例在那个文件下都能取得到. 通过单例设计模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节省系统资源.如果希望在系统中某个类的对象只能存在一个,单例模式是最好的选择. 下面来点实在的,创建单例代码上 方法1:基于线程安全创建一个单例 .h做一下声明 + (id)

OC中的单例设计模式及单例的宏抽取

1 // 在一个对象需要重复使用,并且很频繁时,可以对对象使用单例设计模式 2 // 单例的设计其实就是多alloc内部的allocWithZone下手,重写该方法 3 4 #pragma Person.h文件 5 6 #import <Foundation/Foundation.h> 7 @interface Person : NSObject <NSCopying,NSMutableCopying> 8 + (instancetype)sharePerson; // 给类提供一

Java面向对象_单例设计模式

单例设计模式:保证一个类仅有一个实例,并提供一个访问它的全局访问点 1.构造方法私有化 2.声明一个本类对象 3.给外部提供一个静态方法获取对象实例 两种实现方式:饿汉式和懒汉式 何种情况下使用呢?当一个类中没有属性(对象的状态):该类作为工具类使用非常频繁: 好处:节省内存(因为不断创建对象会消耗内存) 1 public class Practice14 { 2 3 public static void main(String[] args) { 4 // TODO Auto-generate

Java学习之单例设计模式

单例设计模式:解决一个类在内存只存在一个对象. (1) 想要保证对象唯一. a)为了避免其他程序过多建立该类对象.先禁止其他程序建立该类对象 b)还为了让其他程序可以访问到该类对象,只好在本类中,自定义一个对象. c)为了方便其他程序对自定义对象的访问,可以对外提供一些访问方式. (2) 这三部怎么用代码体现呢? a)将构造函数私有化. b)在类中创建一个本类对象. c)提供一个方法可以获取到该对象. (3) 对于事物该怎么描述,还怎么描述. 当需要将该事物的对象保证在内存中唯一时,就将以上的三

IOS中的单例设计模式

单例设计模式是IOS开发中一种很重要很常用的一种设计模式.它的设计原理是无论请求多少次,始终返回一个实例,也就是一个类只有一个实例.下面是苹果官方文档中关于单例模式的图片: 如图所示,左边的图是默认的多例模式,只要发送请求去创建对象,就会得到一个新的对象:而右侧的图是单例模式,发送多个请求创建对象,但是最后返回的始终是同一个. 因为创建单例类的实例是在确保没有其他实例的情况下才创建的,并且在程序中使用的过程中始终是同一个实例,因此单例类可以作为提供一个全局访问资源的类,比如NSUserDefau

java面试题 单例设计模式

单例设计模式 某个类必须只有一个实例 (构造器私有化) 类必须自行创建实例(含有一个该类的静态变量存储该实例) 类自行向其他类提供这个实例  (对外提供获取该实例对象的方式) 饿汉式 在类初始化的时候直接创建对象  不存在线程安全问题  1.直接实例化饿汉式(简洁直观)   2.静态代码块饿汉式(适合复杂实例化)   3.枚举式(最简洁) 1 1 public class Singleton1 { 2 public final static Singleton1 singleton = new

iOS--Swift开发中的单例设计模式

最近在开发一个小的应用,遇到了一些Objective-c上面常用的单例模式,但是swift上面还是有一定区别的,反复倒来倒去发现不能按常理(正常的oc to swift的方式)出牌,因此搜索了一些帖子.可能是xcode或者sdk的问题吧(我相信他们不会把未经测试的代码展示,吧?...),一些帖子中的代码犯了明显的错误,编译失败.于是有了这篇文章,分享给大家. 原作者实现了一种单例,但是红色代码导致非线程安全: 1 class var sharedInstance:TPScopeManager {