浅谈设计模式----单例模式
单例模式:也即一个类永远只是产生一个对象。所有的对象共享一块内存单元,故当我们比较任意两个对象是否(==)的时候,其返回值永远是true,否则就不满足单例模式的要求。
单例模式的构造方式有两种构造形式:懒汉模式和饥饿模式(这在校园招聘的时候经常考到的知识点。面试官会问,而且有些公司也很喜欢考的模式)。下面是一些具体实现代码:
package com.designpattern.singleton;
/**
* 定义一个皇帝即为单例模式。只有一个皇帝
* @author Administrator
*
*/
public class Emperor {
//单例模式的饥饿模式
/**
* 第一步:定义一个静态的类对象
*/
private static Emperor emperor;
/**
* 第二步:私有的构造函数
*/
private Emperor(){
}
/**
* 第三步:得到一个类对象的初始化方法
* 通过方法得到类对象,而不是new Emperor()
*/
public static Emperor getInstance(){
if(emperor==null){
emperor=new Emperor();
}
return emperor;
}
//皇帝叫什么名字
public static void emperorInfo(){
System.out.println("我是皇帝康熙");
}
/**
* 以下是懒汉模式,而且对对象加锁,解决了B/S结构中多个线程
* 同时访问造成数据不一致
*/
/*
private static final Emperor emperor= new Emperor();
//限制住不能直接产生一个实例
private Emperor(){
}
public synchronized static Emperor getInstance(){
return emperor;
}
*/
}
/**
* 定义一个皇帝即为单例模式。只有一个皇帝
* @author Administrator
*
*/
public class Emperor {
//单例模式的饥饿模式
/**
* 第一步:定义一个静态的类对象
*/
private static Emperor emperor;
/**
* 第二步:私有的构造函数
*/
private Emperor(){
}
/**
* 第三步:得到一个类对象的初始化方法
* 通过方法得到类对象,而不是new Emperor()
*/
public static Emperor getInstance(){
if(emperor==null){
emperor=new Emperor();
}
return emperor;
}
//皇帝叫什么名字
public static void emperorInfo(){
System.out.println("我是皇帝康熙");
}
/**
* 以下是懒汉模式,而且对对象加锁,解决了B/S结构中多个线程
* 同时访问造成数据不一致
*/
/*
private static final Emperor emperor= new Emperor();
//限制住不能直接产生一个实例
private Emperor(){
}
public synchronized static Emperor getInstance(){
return emperor;
}
*/
}
package com.designpattern.singleton;
/**
* 大臣类 每天朝拜皇帝
* @author Administrator
*
*/
public class Minister {
public static void main(String[] args) {
//第一天见到的皇帝
Emperor emp=Emperor.getInstance();
emp.emperorInfo();
//第二天见到的皇帝
Emperor emp1=Emperor.getInstance();
emp1.emperorInfo();
//第三天见到的皇帝
Emperor emp2=Emperor.getInstance();
emp2.emperorInfo();
//验证Emperor类为单例模式的重要判断。其拥有共同的内存
/**
* 以下三个任意两个对象都相同
*/
System.out.println(emp==emp1);
System.out.println(emp1==emp2);
System.out.println(emp==emp2);
}
}
/**
* 大臣类 每天朝拜皇帝
* @author Administrator
*
*/
public class Minister {
public static void main(String[] args) {
//第一天见到的皇帝
Emperor emp=Emperor.getInstance();
emp.emperorInfo();
//第二天见到的皇帝
Emperor emp1=Emperor.getInstance();
emp1.emperorInfo();
//第三天见到的皇帝
Emperor emp2=Emperor.getInstance();
emp2.emperorInfo();
//验证Emperor类为单例模式的重要判断。其拥有共同的内存
/**
* 以下三个任意两个对象都相同
*/
System.out.println(emp==emp1);
System.out.println(emp1==emp2);
System.out.println(emp==emp2);
}
}