【注意】:工厂模式学习知识结构如下:
(一)、单例模式
1.Single类:
使用懒汉式:对象的延迟加载,安全的,高效的应用
双重判断提升效率和安全性
package singleton; /* * 单例设计模式之饿汉式(在多线程并发时不会有问题) 不常用! public class Single { private Single(){} private static final Single s = new Single(); public static Single getInstance(){ return s; } } ------------------------------------------------- 单例设计模式之懒汉式(在多线程并发时可能有问题,所以需要加锁) public class Single { private Single(){} private static Single s = null; public static Single getInstance(){ if(s ==null){ s = new Single(); } return s; } } ---------------------------------------------------- public class Single { //改进懒汉式,加锁 private Single(){} private static Single s = null; public static Single getInstance(){ if(s==null){ //首先,可能会有多个线程到这一步认为都是空,所以这是一重判断 synchronized(Single.class){//同步代码块:被锁住的代码块 if(s ==null){//其次,不可能两个线程同时锁住,所以,这是二重判断 s = new Single(); } } } return s; } } * */ //使用懒汉式:对象的延迟加载,安全的,高效的应用 //双重判断提升效率和安全性 public class Single { private Single(){} private static Single s = null; //这里锁住方法,效率就低了,结果就是只有一个线程能用,那其余线程怎么办???只能等着,效率很低且没有意义。如果是把创建对象的方法锁住就明显有效率了!!! public static Single getInstance() { if (s == null) {//双重判断 synchronized (Single.class) { if (s == null) {//双重判断 s = new Single(); } } } return s; } }
2、Run类
package singleton;
public class Run implements Runnable {
public void run(){
for(int x = 0 ;x<50 ;x++){
Single s = Single.getInstance();
System.out.println(s);
}
}
}
3、Test
* 设计模式:实际的软件开发,对问题的处理总结经验,设计模式。前提是面向对象
*
* 23种设计模式
*
* 单例设计模式:
* 保证一个类的对象的唯一性
* 私有构造方法
* 在本类的成员位置,创造自己类的对象
* 提供公共方法用来返回自己创建的对象
*
* 单例在Java中的应用:Runtime
package singleton;
/*
* 设计模式:实际的软件开发,对问题的处理总结经验,设计模式。前提是面向对象
*
* 23种设计模式
*
* 单例设计模式:
* 保证一个类的对象的唯一性
* 私有构造方法
* 在本类的成员位置,创造自己类的对象
* 提供公共方法用来返回自己创建的对象
*
* 单例在Java中的应用:Runtime
*
* */
public class Test {
public static void main(String[] args) {
Run r = new Run();
//多线程
new Thread(r).start();//第一个线程进来,判断对象是空,拿锁,自己创建唯一对象
new Thread(r).start();//第二个进程进来,对象已不空,直接返回唯一对象!
}
}
(二)、简单工厂
1、