- 浏览: 70409 次
- 性别:
- 来自: 天津
文章分类
最新评论
单例模式的特点:保证在整个应用程序中只存在一个对象
单例模式的步骤:
1.把构造方法私有化,这样就能够保证只有本类能够创建本类的对象。(保证了本类只能创建本类的一个对象,外界不能创建本类的对象)
2.把需要共享的属性或者方法写成静态的,目的是供外界调用。但是当需要共享的属性和方法过多的时候,就会产生代码冗余,因此最好的办法就是直接把此类声明成静态的变量。
3.构造方法已经写好了,此时要做的就是创建对象了。用new关键字创建对象,把这个对象传给一个引用类型的变量private static Single s = new Single(),之所以要把这个对象赋值给一个引用类型的变量,是为了要用变量的static关键字。此时把这个对象共享了。此时外界可以用类名去调用这个类了,但是调用的也是这个类的静态方法(因为该类的对象是静态的,因此该类的对象调用方法的时候,也必须调用静态的方法),因此此时写一个静态方法供外界调用。public static Single getInstance() {return s;}
(外界虽然不能创建本类的对象,但是可以调用本类对象中的静态方法)
----------以下是代码:
public class Single
{
/**
例如程序员在电脑上下载文件,公司的所有程序员要用这个文件,但是没必要每个人都下载。只要有一个人下载,其他人用就行了
要求:只存在该类的一个对象
1 将构造函数私有化(这样的目的是只有本类自己能够产生我自己的对象,别人不能创建我。也就是说别人无法下载)
2 自己给创建对象 ()
3 提供公共static方法获得该类的对象
**/
private String str="";
private static Single s = new Single();//2.别人不能创建这个类的对象,那我自己给自己创建对象
private Single()//1.这个类的对象不能随便创建,只能本类创建
{
}
public static Single getInstance()//3.获取私有属性的值,用属性Single 的get方法,方法名字是实例的意思
{
return s;
}
public String getStr()
{
return this.str;
}
public void setStr(String str)
{
this.str=str;
}
public void read()
{
this.str="只存在该类的一个对象,下载文件";
}
}
---外界调用过程
public class SingleTest
{
public static void main(String[] args)
{
Single s1 = Single.getInstance();//实例化
s1.read(); //通过read方法,把值保存在属性str中了。
String str=s1.getStr();//获取str中的值,根据的是str的get方法
System.out.println("str="+str);//输出
Single s2 = Single.getInstance();//实例化
//s2.read(); //通过read方法,把值保存在属性str中了。
String str2=s2.getStr();//获取str中的值,根据的是str的get方法
System.out.println("str2="+str2);//输出
s2.setStr("111111111111111");//设置str值
Single s3 = Single.getInstance();//实例化
//s3.read(); //通过read方法,把值保存在属性str中了。
String str3=s3.getStr();//获取str中的值,根据的是str的get方法
System.out.println("str3="+str3);//输出
}
}
单例模式的步骤:
1.把构造方法私有化,这样就能够保证只有本类能够创建本类的对象。(保证了本类只能创建本类的一个对象,外界不能创建本类的对象)
2.把需要共享的属性或者方法写成静态的,目的是供外界调用。但是当需要共享的属性和方法过多的时候,就会产生代码冗余,因此最好的办法就是直接把此类声明成静态的变量。
3.构造方法已经写好了,此时要做的就是创建对象了。用new关键字创建对象,把这个对象传给一个引用类型的变量private static Single s = new Single(),之所以要把这个对象赋值给一个引用类型的变量,是为了要用变量的static关键字。此时把这个对象共享了。此时外界可以用类名去调用这个类了,但是调用的也是这个类的静态方法(因为该类的对象是静态的,因此该类的对象调用方法的时候,也必须调用静态的方法),因此此时写一个静态方法供外界调用。public static Single getInstance() {return s;}
(外界虽然不能创建本类的对象,但是可以调用本类对象中的静态方法)
----------以下是代码:
public class Single
{
/**
例如程序员在电脑上下载文件,公司的所有程序员要用这个文件,但是没必要每个人都下载。只要有一个人下载,其他人用就行了
要求:只存在该类的一个对象
1 将构造函数私有化(这样的目的是只有本类自己能够产生我自己的对象,别人不能创建我。也就是说别人无法下载)
2 自己给创建对象 ()
3 提供公共static方法获得该类的对象
**/
private String str="";
private static Single s = new Single();//2.别人不能创建这个类的对象,那我自己给自己创建对象
private Single()//1.这个类的对象不能随便创建,只能本类创建
{
}
public static Single getInstance()//3.获取私有属性的值,用属性Single 的get方法,方法名字是实例的意思
{
return s;
}
public String getStr()
{
return this.str;
}
public void setStr(String str)
{
this.str=str;
}
public void read()
{
this.str="只存在该类的一个对象,下载文件";
}
}
---外界调用过程
public class SingleTest
{
public static void main(String[] args)
{
Single s1 = Single.getInstance();//实例化
s1.read(); //通过read方法,把值保存在属性str中了。
String str=s1.getStr();//获取str中的值,根据的是str的get方法
System.out.println("str="+str);//输出
Single s2 = Single.getInstance();//实例化
//s2.read(); //通过read方法,把值保存在属性str中了。
String str2=s2.getStr();//获取str中的值,根据的是str的get方法
System.out.println("str2="+str2);//输出
s2.setStr("111111111111111");//设置str值
Single s3 = Single.getInstance();//实例化
//s3.read(); //通过read方法,把值保存在属性str中了。
String str3=s3.getStr();//获取str中的值,根据的是str的get方法
System.out.println("str3="+str3);//输出
}
}
发表评论
-
二分法、冒泡排序
2017-03-03 10:31 332import java.util.Scanner;/** ... -
for、while循环,打印三角形、菱形
2017-03-03 09:54 520import java.util.Scanner;publi ... -
单线程与多线程
2016-01-16 12:10 593单线程:按照程序 ... -
字节流,字符流,对象流,序列化,持久化
2016-01-15 11:25 648第一:读写字符串 input(读文件里的内容) 的步骤: ... -
深入反射、IO文件、字节流
2016-01-15 11:11 444第一:反射相关的概念 1.反射中调用构造函数默认都是调用 ... -
百度字符串
2016-01-07 17:41 5291、length() 字符串的长度 例:char char ... -
map集合转化成list集合
2015-12-28 15:52 1632package emp; public class Emp ... -
反射
2015-12-28 15:47 395第一:反射的概念 1.(1).java程序源文件(属性和 ... -
泛型
2015-12-28 15:24 381第一:泛型:问题:1.在运算时候必须要向下转型。向下转型存 ... -
map集合和他的实现类hasHmap(不安全)和hashTable(安全)
2015-12-28 15:15 586第一:初步认识map 1.键值对(key与value是一一 ... -
set接口和它的实现类treeset和hashset
2015-12-01 22:50 517第一:set接口:set接口里面的元素不能重复,因此nul ... -
Collection集合根接口、两个子接口list和set
2015-11-30 22:29 593第一:由数组的 ... -
String与StringBuffer、Date日期与SimpleDateFormat 简单的日期格式化
2015-11-29 22:31 620第一:String类:字符串常量1.String是一个类, ... -
异常与异常类
2015-11-25 22:58 374第一.异常的概念:异常就是程序在运行中的错误,程序中的异常用异 ... -
快捷键
2015-11-24 23:06 2681.导包:ctrl+shift+O 2.找类:ctrl+shi ... -
向下转型与instanceof 关键字,object类(系统类)中的常用方法
2015-11-24 23:02 920第一:向下转型 1.向下 ... -
接口,抽象类与接口的关系。多肽、向上转型与动态绑定的引出
2015-11-23 22:04 434第一:在引入接口之前 ... -
关键字:extends继承、abstract 抽象,继承与抽象类之间的关系、final最终的
2015-11-22 17:02 830----继承 1.extends的是继承或者扩展的意思。父类写 ... -
this和static关键字,javadoc文档的产生
2015-11-22 15:51 312----this和static关键字 public class ... -
java内存分析
2015-11-22 15:16 2371.局部变量中的引用类型是把地址存到栈内存中,由栈内存中的地址 ...
相关推荐
static静态关键字和单例模式
枚举实现单例模式static修饰下是怎么做到线程安全的?完全不使用synchronized实现单例模式1. CAS(AtomicReference)实现单例模式2. ThreadLocal实现单例模式如何破坏单例如何防止单例被破坏参考文章 单例模式有...
设计模式里面的单例模式程序 package com.rrppff; public class Singleton { private static String name; public static String getName() { return name; } public static void setName(String name) { ...
单例模式的实现饿汉式懒汉式线程安全的懒汉式登记式单例模式的优缺点单例模式的优点单例模式的缺点 单例模式是23个模式中比较简单的模式,应用也非常广泛 什么是单例模式? 单例模式的定义: Ensure a class ...
单例模式,顾名思义,只有一个实例,因此这种模式只有在真正的需求“单一实例”的时候使用。它提供一种方法来确保某一特定类型有且只有一个实例。而且自行实例化,并向外部提供这个单一实例。 在它核心结构中,只...
10、面向对象进阶(static、单例、代码块、继承).pptx
//单例模式,始终只产生一个对象 /*public class SingleTest { public static void main(String[] args) { SingleTon singleTon1=SingleTon.getInstance(); SingleTon singleTon2=SingleTon.getInstance(); ...
一、 单例模式概述 Java中单例模式的定义是:一个类只有一个实例,而且自行实例化并且向整个系统提供这个实例。 优点:由于单例模式在内存中只有一个实例,减少了内存开支和系统的性能开销;单例模式可以避免...
一、什么是单例模式? 1、含义 作为对象的创建模式,单例模式确保某一个类只有一个实例,而且自行实例化并向整个系统全局地提供这个实例。它不会创建实例副本,而是会向单例类内部存储的实例返回一个引用。 2、...
* 类载入到jvm的时候,会进行初始化,但是只会初始化static成员和static代码块, * 而不会初始化静态内部类的成员。因此,只有实际调用getInstance的时候, * 才会初始化静态内部类的静态成员。做到了延迟加载。 ...
我们都很清楚一个简单的单例模式该怎样去实现:构造函数声明为private或protect防止被外部函数实例化,内部保存一个private static的类指针保存唯一的实例,实例的动作由一个public的类方法代劳,该方法也返回单例类...
java 设计模式–单例模式推理过程 设计模式(全名:软件设计模式),是一套反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。 使用设计模式是为了可重用代码,让代码更容易被他人理解,保证代码可靠性...
Android Singleton单例模式运用详解
单例模式 来了来了,他来了。大家好,我是老王。今天给大家带来的是23种设计模式的第一种——单例模式。前天写的第一篇文章设计模式的七大原则,是我第一次写文章,目前看了浏览量,让我信心大增。文章有什么讲述...
php /** * 单例模式 * * 保证一个类仅有一个实例,并提供一个访问它的全局访问点 * */ class Singleton { static private $_instance = null; private function __construct() { } static public function ...
单例对象必须由单例类自行创建,并对外提供访问入口 一个类可以创建多个对象,这是面向对象的语言特性,想要实现单例模式,就要屏蔽这个特性,防止系统可以随意创建类的对象。 要做到这一点,通常做法就是利用...
单例模式大概是所有设计模式中最简单的一种,如果在面试时被问及熟悉哪些设计模式,你可能第一个答的就是单例模式。 单例模式的实现分为两种:饿汉式和懒汉式。前者是在静态构造函数执行时就立即实例化,后者是在...
单例模式(Singleton Pattern 单件模式或单元素模式),是常见的一种设计模式,它有三个特点 1.只能有一个实例 2.必须自行创建这个实例 3.必须给其他对象提供这一实例 下面用PHP代码实现一下 <?PHP /** *...
第1章-第3节(重载、this关键字、构造器、static、final、封装、单例模式).md
这是一个关于多线程下的单例模式优化代码。public class Singleton { private static Singleton instance; private Singleton (){ } public static Singleton getInstance(){ //对获取实例的方法进行同步 if...