java两种单例模式

第一种

 1 package com.atguigu.javase;
 2 import java.io.IOException;
 3
 4 /**
 5  * @author _aL0n4k
 6  * @version 1.0
 7  * @time 2015年9月2日 下午6:12:52
 8  */
 9 public class Singleton_HungerMode { //单例模式  - 饥饿式
10     private Singleton_HungerMode() {} //把构造器设置为private,这样就无法在其他内new对象
11
12     private static Singleton_HungerMode singleton = new Singleton_HungerMode();
13     //只可以在本类创建,这里加上static是因为让方法获取对象,因为不能创建对象,
14     //所以只能通过类名的方式去访问方法获取对象.然后静态方法不能访问非静态方法,所以这里也要写上static
15     //加上private是因为没必要在其他类里面访问他.
16     public static Singleton_HungerMode getSingleton() {
17         //返回创建的对象,加上static是为了在其他类里可以用类名去调用.
18         //访问权限要加上public不然无法在别的类用类名的方式调用该方法
19         return singleton;
20     }
21 }
22 class Singleton_HungerModeTest{
23
24     public static void main(String[] args) throws IOException {
25         Singleton_HungerMode s = Singleton_HungerMode.getSingleton();
26         //通过类名方式访问静态方法,以突破不能在别的类里创建对象的限制.
27         Singleton_HungerMode s1 = Singleton_HungerMode.getSingleton();
28
29         if(s == s1) {
30             System.out.println("是同一个对象");
31         }
32         else System.out.println("不是同一个对象");
33
34
35
36     }
37 }

第二种

 1 package com.atguigu.javase;
 2
 3 /**
 4  * @author _aL0n4k
 5  * @version 1.0
 6  * @time 2015年9月2日 下午6:12:47
 7  */
 8 public class Singleton_IdlerMode { //单例模式 - 懒汉式
 9     private Singleton_IdlerMode(){}//把构造器设置为私有,以阻止在外部类创建对象
10     private static Singleton_IdlerMode singleton = null;
11     //设置一个引用为空,以便只有让在类内部调用他.因为不能创建对象,所以我们需要用static静态修饰,然后用
12     //类名的方式来访问.在下方写个获取对象引用的方法,要加上static以便在别的类调用这个方法以获取这个对象的引用.
13     //所以这里也要加上static
14
15     //这里写成public是因为要在类外部调用这个方法,获取 对象引用,加上static是因为不能创建对象 让他通过类名的方式去调用它.
16     //因为要返回这个类的引用,所以返回值要写成Singleton
17     public static Singleton_IdlerMode getSingleton() {
18         //如果引用空我们才去创建对象然后返回引用,而且因为是单例我们只能调用一次.
19         //当这个方法被调用后,singleton就不在为空,所以加上个判断.只有当满足这个条件的时候,才在这里给他创建对象的引用
20         if(singleton == null) {
21             singleton = new Singleton_IdlerMode();
22         }
23         return singleton;
24     }
25
26 }
27
28 //写个测试类测试下,创建的2个对象是不是指向一个地址,如果是则说明是一个对象.
29 class Singleton_IdlerModeTest {
30     public static void main(String[] args) {
31         Singleton_IdlerMode singleton1 = Singleton_IdlerMode.getSingleton();
32         Singleton_IdlerMode singleton2 = Singleton_IdlerMode.getSingleton();
33         //这2个引用的地址相等说明是一个对象,那么就符合单例模式
34         if(singleton1 == singleton2) {
35             System.out.println("是一个对象");
36         }else System.out.println("不是一个对象");
37     }
38 }
时间: 2024-10-11 07:26:04

java两种单例模式的相关文章

7、java实现的两种单例模式

/* 两种单例模式的演示 */ //饿汉式 class Signal { private Signal(){} private Signal s = new Signal(); public static Signal getInstance() { return s; } } //懒汉式 class Signal { private Signal(){} private Signal s = null; public static Signal getInstance() { if(s ==

iOS开发笔记-两种单例模式的写法

iOS开发笔记-两种单例模式的写法 单例模式是开发中最常用的写法之一,iOS的单例模式有两种官方写法,如下: 不使用GCD #import "ServiceManager.h" static ServiceManager *defaultManager; @implementation ServiceManager +(ServiceManager *)defaultManager{ if(!defaultManager) defaultManager=[[self allocWith

两种单例模式的写法

iOS的单例模式有两种官方写法,如下: (1)不使用GCD #import "ServiceManager.h" static ServiceManager *defaultManager; @implementation ServiceManager +(ServiceManager *)defaultManager{ if(!defaultManager) defaultManager=[[self allocWithZone:NULL] init]; return default

java基础——java内存,两种单例模式

/* * java运行内存: * 堆(heap):存储的全是对象,每个对象都包含一个与之对应的class信息 * 只有一个heap,被所有线程共享,heap中不存放基本数据类型和对象引用,只放对象本身 * 栈:每个线程都有属于自己的栈(用户态栈),栈中保存基本数据类型的对象和自定义对象的引用,这个引用指向了堆区的实例 * 方法区(静态区):被所有线程共享,包含所有的class和static变量 * 包含整个程序中永远唯一的元素,即class,static变量 * * * 如何确定一个属性,方法要

java两种序列化(hessian与java自带)性能实验分析报告

序列化的5w2h分析 what:序列化是一种将java对象流化的机制 how:将一个实现了Serializable接口的对象的状态写入byte[],传输到另外一个地方,将其读出进行反序列化得对象(含状态).状态就是类中的属性是含有值的. why:方便对象在网络间进行传播,并且可以随时把对象持久化到数据库.文件等系统里 when:对象需要远程过程调用,缓存到文件或DB中(hessian,rmi,ejb) where:发送接口处,写入文件的入口处 who:发送端序列化,接收端反序列化 how muc

java两种创建String对象的区别

public class StringTest{     public static void main(String[] args){         String s1="abc";//只会在字符串常量池中创建一个"abc"字符串对象         String s2=new String("eieie");//会在字符串常量池中创建一个"hello"字符串对象,并且会在堆中再创建一个字符串对象     } } //第二

java两种定时器

第一种:循环执行的程序 import java.text.SimpleDateFormat;import java.util.Date;import java.util.concurrent.Executors;import java.util.concurrent.ScheduledExecutorService;import java.util.concurrent.TimeUnit;/** * java定时器 * @author lin * */public class Scheduled

Java两种核心机制

1.Java虚拟机 2.垃圾回收

Java 两种方式实现Token校验

方法一:AOP 代码如下定义一个权限注解 [java] view plain copy package com.thinkgem.jeesite.common.annotation; import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Targe