[认识10以内的单双数教学反思]《认识10以内的单双数》教学反思篇一 这次的教研活动内容是大班数学活动《认识10以内的单双数》,我在想,这样的一个活动会给我们带来怎样的思考,能提高我们多少的能力?不由对这...+阅读
如何写一个简单的单例模式
单例模式的要点有三个;一是某各类只能有一个实例;二是它必须自行创建这个事例;三是它必须自行向整个系统提供这个实例。
单例模式有以下的特点:
1 单例类只可有一个实例。
2 单例类必须自己创建自己这惟一的实例。
3 单例类必须给所有其他对象提供这一实例。
public class EagerSingleton
{
private static final EagerSingleton m_instance =
new EagerSingleton();
/**
* 私有的默认构造子
*/
private EagerSingleton() { }
/**
* 静态工厂方法
*/
public static EagerSingleton getInstance()
{
return m_instance;
}
}
在这个类被加载时,静态变量m_instance 会被初始化,此时类的私有构造子会被调用。这时候,单例类的惟一实例就被创建出来了。
楼主可以具体参阅 阎宏博士的《Java与模式》一书的第十五章
如何写一个标准的Java单例模式
java中单例模式是一种常见的设计模式,单例模式分三种:懒汉式单例、饿汉式单例、登记式单例三种。单例模式有一下特点:
1、单例类只能有一个实例。
2、单例类必须自己自己创建自己的唯一实例。
3、单例类必须给所有其他对象提供这一实例。单例模式确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。在计算机系统中,线程池、缓存、日志对象、对话框、打印机、显卡的驱动程序对象常被设计成单例。这些应用都或多或少具有资源管理器的功能。每台计算机可以有若干个打印机,但只能有一个Printer Spooler,以避免两个打印作业同时输出到打印机中。每台计算机可以有若干通信端口,系统应当集中管理这些通信端口,以避免一个通信端口同时被两个请求同时调用。总之,选择单例模式就是为了避免不一致状态,避免政出多头。首先看一个经典的单例实现。public class Singleton {private static Singleton uniqueInstance = null;private Singleton() {// Exists only to defeat instantiation.}public static Singleton getInstance() {if (uniqueInstance == null) {uniqueInstance = new Singleton();}return uniqueInstance;}// Other methods...}Singleton通过将构造方法限定为private避免了类在外部被实例化,在同一个虚拟机范围内,Singleton的唯一实例只能通过getInstance()方法访问。(事实上,通过Java反射机制是能够实例化构造方法为private的类的,那基本上会使所有的Java单例实现失效。此问题在此处不做讨论,姑且掩耳盗铃地认为反射机制不存在。)但是以上实现没有考虑线程安全问题。所谓线程安全是指:如果你的代码所在的进程中有多个线程在同时运行,而这些线程可能会同时运行这段代码。如果每次运行结果和单线程运行的结果是一样的,而且其他的变量的值也和预期的是一样的,就是线程安全的。或者说:一个类或者程序所提供的接口对于线程来说是原子操作或者多个线程之间的切换不会导致该接口的执行结果存在二义性,也就是说我们不用考虑同步的问题。显然以上实现并不满足线程安全的要求,在并发环境下很可能出现多个Singleton实例。//////////////////////////////////////////////////////////////////////验证单例模式的示例//////////////////////////////////////////////////////////////////////public class TestStream {private String name;public String getName() {return name;}public void setName(String name) {this.name = name;}// 该类只能有一个实例private TestStream() {} // 私有无参构造方法// 该类必须自行创建// 有2种方式private static TestStream ts1 = null;// 这个类必须自动向整个系统提供这个实例对象public static TestStream getTest() {if (ts1 == null) {ts1 = new TestStream();}return ts1;}public void getInfo() {System.out.println("output message " + name);}public static void main(String[] args) {TestStream s = TestStream.getTest();s.setName("张孝祥 1");System.out.println(s.getName());TestStream s1 = TestStream.getTest();s1.setName("张孝祥 2");System.out.println(s1.getName());s.getInfo();s1.getInfo();if (s == s1) {System.out.println("创建的是同一个实例");} else if (s != s1) {System.out.println("创建的不是同一个实例");} else {System.out.println("application error");}}}////////////////////////////////////////////
java中的单例模式的代码怎么写
我从我的博客里把我的文章粘贴过来吧,对于单例模式模式应该有比较清楚的解释:单例模式在我们日常的项目中十分常见,当我们在项目中需要一个这样的一个对象,这个对象在内存中只能有一个实例,这时我们就需要用到单例。一般说来,单例模式通常有以下几种:1.饥汉式单例 public class Singleton { private Singleton(){}; private static Singleton instance = new Singleton(); public static Singleton getInstance(){ return instance; } } 这是最简单的单例,这种单例最常见,也很可靠!它有个唯一的缺点就是无法完成延迟加载——即当系统还没有用到此单例时,单例就会被加载到内存中。
在这里我们可以做个这样的测试:将上述代码修改为:public class Singleton { private Singleton(){ System.out.println("createSingleton"); }; private static Singleton instance = new Singleton(); public static Singleton getInstance(){ return instance; } public static void testSingleton(){ System.out.println("CreateString"); } } 而我们在另外一个测试类中对它进行测试(本例所有测试都通过Junit进行测试) public class TestSingleton { Test public void test(){ Singleton.testSingleton(); } } 输出结果:createSingleton CreateString 我们可以注意到,在这个单例中,即使我们没有使用单例类,它还是被创建出来了,这当然是我们所不愿意看到的,所以也就有了以下一种单例。
2.懒汉式单例 public class Singleton1 { private Singleton1(){ System.out.println("createSingleton"); } private static Singleton1 instance = null; public static synchronized Singleton1 getInstance(){ return instance==null?new Singleton1():instance; } public static void testSingleton(){ System.out.println("CreateString"); } } 上面的单例获取实例时,是需要加上同步的,如果不加上同步,在多线程的环境中,当线程1完成新建单例操作,而在完成赋值操作之前,线程2就可能判 断instance为空,此时,线程2也将启动新建单例的操作,那么多个就出现了多个实例被新建,也就违反了我们使用单例模式的初衷了。
我们在这里也通过一个测试类,对它进行测试,最后面输出是 CreateString 可以看出,在未使用到单例类时,单例类并不会加载到内存中,只有我们需要使用到他的时候,才会进行实例化。这种单例解决了单例的延迟加载,但是由于引入了同步的关键字,因此在多线程的环境下,所需的消耗的时间要远远大于第一种单例。我们可以通过一段测试代码来说明这个问题。
public class TestSingleton { Test public void test(){ long beginTime1 = System.currentTimeMillis(); for(int i=0;i
如何实现单例模式
这个模式保护类的创建过程来确保只有一个实例被创建,它通过设置类的构造方法为私有来达到这个目的。
要获得类的实例,单例类可以提供一个方法,如getInstance,来返回类的实例。该方法是唯一可以访问类来创建实例的方法。
下面是单例的一个例子:Java代码publicclassSingletonPattern{privatestaticSingletonPatterninstance;privateSingletonPattern(){}publicstatic
synchronized
SingletonPatterngetInstance(){if(instance==null){instance=newSingletonPattern();}returninstance;}}
当我们要实现单例的时候,有如下的规则需要遵循:
从上面的示例代码中可以看出,一个单例类有一个静态的属性来保存它唯一的实例
需要将类的构造方法设置为private。这样你不允许其他任何类来创建单例类的实例,因为它们不能访问单例类的构造方法。
延伸阅读:
如何写好简单的开发信Afealty here, glad to hear that you are in the market of printing cartridge. We specializing in manufacture and export of printing cartridge and parts for more...
业务开展内容描述商业模式目标用户收费模式等怎么写1.直接告诉投资人你在做什么。(痛点分析/需求分析) 用几句话阐述你发现目前市场中有什么空白,或者存在什么问题,这个问题有多严重,效率有多么低下、供给有多么缺乏。比如,滴滴解决...
如何使用Oracle存储过程的一个简单例子楼主您好 ---创建表 create table TESTTABLE ( id1 VARCHAR2 (12), name VARCHAR2(32) ) select t.id1,t.name from TESTTABLE t insert into TESTTABLE (ID1, NAME) values...
如何写简单的英语文章你是写日记吗?去买本英语小作文好了,可以一边看看他们怎么写的,一边学习他们的句型。我这里有一篇小文章,也许对你有用的。 Today,I went home with my schoolbag after school....
如何高效的创建一个线程安全的单例单例模式的概念 单例模式就是确保只有一个实例,而且自行实例化并向整个系统传递这个实例,这个类就称作为单例类 单例模式最重要的一个特点就是构造方法私有化。创建单例模式分...
给我一个简单。搞笑的小学生小品又不要太简单给我一个简单。搞笑的小学生小品又不要太简单,问一下谁有5人小学爆笑小品:甲:我们俩给大家表演 乙:对,说一段相声 甲:我们俩啊, 上了台啊是搭档 乙:下了台呢,是同桌 甲:他就是我同桌的...
简单概括一个名人创业故事简单概括一个名人创业故事,求篇名人成功创业的文章。越短越好:这是首席架构师、“贴吧之父”俞军2000年的一份求职简历。作为真正改变中国互联网状态的极少数几个人之一,俞军这...
如何自己实现一个简单的ArrayList如何自己实现一个简单的ArrayList,java中Arraylist是干什么的?怎么用:ArrayList是Java集合框架中一个经典的实现类。他比起常用的数组而言,明显的优点在于,可以随意的添加和删除...
体育中的单招是什么意思体育中的单招是什么意思,何谓体育文化?体育单招考生应在报考高校规定时间内,根据报考院校招生简章中测试项目、时间、地点、选拔程序等要求,统一在“中国运动员文化教育网”体育...