【设计模式】之实例化单例模式
2008-11-21 20:55
225 查看
com.cleversoft.designpatterns.singleton1.Singleton.java:
package com.cleversoft.designpatterns.singleton1;
/** *//**
* Hungry Singleton
*
*/
public class Singleton {
private static Singleton singleton = new Singleton();
private Singleton() {
}
public static Singleton getInstance() {
return singleton;
}
public String demoMethod() {
return "This is a hungry singleton demo!";
}
}
//---------------------------------------------------------------------------------------------------------
com.cleversoft.designpatterns.singleton1.Main.java:
package com.cleversoft.designpatterns.singleton1;
public class Main {
/** *//**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(Singleton.getInstance().demoMethod());
}
}
//---------------------------------------------------------------------------------------------------------
懒汉式单例
com.cleversoft.designpatterns.singleton2.LazySingleton.java:
package com.cleversoft.designpatterns.singleton2;
/** *//**
* Lazy Singleton
*
*/
public class LazySingleton {
static boolean instance_flag = false;
private LazySingleton() {
}
synchronized public static LazySingleton getInstance() {
if (!instance_flag) {
instance_flag = true;
return new LazySingleton();
} else
return null;
}
}
//---------------------------------------------------------------------------------------------------------
com.cleversoft.designpatterns.singleton2.Main.java:
package com.cleversoft.designpatterns.singleton2;
public class Main {
/** *//**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
LazySingleton ls1, ls2;
System.out.println("Start to get first Instance");
ls1 = LazySingleton.getInstance();
if (ls1 != null){
System.out.println("This is the first Instance!/n");
}
System.out.println("Start to get second Instance");
ls2 = LazySingleton.getInstance();
if (ls2 != null){
System.out.println("This is the second Instance!");
}
else{
System.out.println("You can just get 1 Instance!");
}
}
}
引用:
>强烈建议大家不要再花时间在实现双重检查成例上
是这样,不必在这上面钻牛角尖,而且单例模式在实际应用中已经逐步被Ioc容器替代,实用价值不高。
有上限多例模式
com.cleversoft.designpatterns.multiton.Die.java:
package com.cleversoft.designpatterns.multiton;
import java.util.Random;
import java.util.Date;
public class Die {
private static Die die1 = new Die();
private static Die die2 = new Die();
private Die() {
}
public static Die getInstance(int whichOne) {
if (whichOne == 1) {
return die1;
} else {
return die2;
}
}
public synchronized int dice() {
Date d = new Date();
Random r = new Random(d.getTime());
int value = r.nextInt();
value = Math.abs(value);
value = value % 6;
value += 1;
System.out.println(value);
return value;
}
}
//---------------------------------------------------------------------------------------------------------
com.cleversoft.designpatterns.multiton.Main.java:
package com.cleversoft.designpatterns.multiton;
public class Main {
private static Die die1;
private static Die die2;
public static void main(String[] args) {
die1 = Die.getInstance(1);
die2 = Die.getInstance(2);
die1.dice();
die2.dice();
}
}
无上限多例模式
比较合适的例子就是在应用程序中的“多语言支持”和序列键生成器。
package com.cleversoft.designpatterns.singleton1;
/** *//**
* Hungry Singleton
*
*/
public class Singleton {
private static Singleton singleton = new Singleton();
private Singleton() {
}
public static Singleton getInstance() {
return singleton;
}
public String demoMethod() {
return "This is a hungry singleton demo!";
}
}
//---------------------------------------------------------------------------------------------------------
com.cleversoft.designpatterns.singleton1.Main.java:
package com.cleversoft.designpatterns.singleton1;
public class Main {
/** *//**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(Singleton.getInstance().demoMethod());
}
}
//---------------------------------------------------------------------------------------------------------
懒汉式单例
com.cleversoft.designpatterns.singleton2.LazySingleton.java:
package com.cleversoft.designpatterns.singleton2;
/** *//**
* Lazy Singleton
*
*/
public class LazySingleton {
static boolean instance_flag = false;
private LazySingleton() {
}
synchronized public static LazySingleton getInstance() {
if (!instance_flag) {
instance_flag = true;
return new LazySingleton();
} else
return null;
}
}
//---------------------------------------------------------------------------------------------------------
com.cleversoft.designpatterns.singleton2.Main.java:
package com.cleversoft.designpatterns.singleton2;
public class Main {
/** *//**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
LazySingleton ls1, ls2;
System.out.println("Start to get first Instance");
ls1 = LazySingleton.getInstance();
if (ls1 != null){
System.out.println("This is the first Instance!/n");
}
System.out.println("Start to get second Instance");
ls2 = LazySingleton.getInstance();
if (ls2 != null){
System.out.println("This is the second Instance!");
}
else{
System.out.println("You can just get 1 Instance!");
}
}
}
引用:
>强烈建议大家不要再花时间在实现双重检查成例上
是这样,不必在这上面钻牛角尖,而且单例模式在实际应用中已经逐步被Ioc容器替代,实用价值不高。
有上限多例模式
com.cleversoft.designpatterns.multiton.Die.java:
package com.cleversoft.designpatterns.multiton;
import java.util.Random;
import java.util.Date;
public class Die {
private static Die die1 = new Die();
private static Die die2 = new Die();
private Die() {
}
public static Die getInstance(int whichOne) {
if (whichOne == 1) {
return die1;
} else {
return die2;
}
}
public synchronized int dice() {
Date d = new Date();
Random r = new Random(d.getTime());
int value = r.nextInt();
value = Math.abs(value);
value = value % 6;
value += 1;
System.out.println(value);
return value;
}
}
//---------------------------------------------------------------------------------------------------------
com.cleversoft.designpatterns.multiton.Main.java:
package com.cleversoft.designpatterns.multiton;
public class Main {
private static Die die1;
private static Die die2;
public static void main(String[] args) {
die1 = Die.getInstance(1);
die2 = Die.getInstance(2);
die1.dice();
die2.dice();
}
}
无上限多例模式
比较合适的例子就是在应用程序中的“多语言支持”和序列键生成器。
相关文章推荐
- 设计模式---外观模式 实例
- JS设计模式之责任链模式实例详解
- Java经典设计模式之五大创建型模式(附实例和详解)
- 深入浅出单实例Singleton设计模式
- 结合项目实例 回顾传统设计模式(四)工厂模式(简单工厂、普通工厂、抽象工厂)
- 设计模式---代理模式 实例
- Java经典设计模式之五大创建型模式(附实例和详解)
- Java经典设计模式之五大创建模式(附实例和详解)
- Java技术_每天掌握一种设计模式(002)_使用场景及简单实例(创建型:单例模式)
- C++设计模式编程中proxy代理模式的使用实例
- JDK 中的设计模式应用实例
- 实例解析C#设计模式编程中简单工厂模式的使用
- 跟着实例学习设计模式(7)-原型模式prototype(创建型)
- C#编程中使用设计模式中的原型模式的实例讲解
- Java 23种设计模式详尽分析与实例解析之三--行为型模式
- .Net中的设计模式——从实例谈OOP、工厂模式和重构
- Net设计模式实例之简单工厂模式(Simple Factory Pattern)
- js原生设计模式——7原型模式之new+call(this)组合应用再探讨实例
- 设计模式php实例:策略模式
- 设计模式---策略模式 实例