单例设计模式
单例设计模式(多例设计模式)主要是一种控制实例化对象产生个数的设计操作。
单例设计
由于某些要求,只要求某些类提供一个实例化对象,首先应该控制的时候构造方法,因为所有的实例化对象要产生一定要调用构造方法,如果构造方法“没有了”,那么自然无法产生实例化对象。
如果将构造方法私有化,则无法进行实例化对象初始化。
所以必须想办法产生一个实例化对象以供使用。
1、private访问权限:不能再外部访问但可在类内部使用。
2、此时考虑static属性
3、类中属性应封装后使用
4、要保证
class Singleton{ //单例设计结构
private static final Singleton INSTANCE = new Singleton();
private Singleton();
public static Singleton getInstance(){
return INSTANCE;
}
}
有些类不需要重复产生对象
单例设计模式:懒汉式、饿汉式。之前的定义属于饿汉式(系统加载时自动提供有类对象),懒汉式(在第一次使用进行实例化对象处理)。
将单例设计为懒汉式:
class Singleton{ //单例设计结构
private static Singleton instance;
private Singleton() {};
public static Singleton getInstance(){
if (instance == null){ //第一次使用
instance = new Singleton(); //实例化对象
}
return INSTANCE;
}
}
面试:编写一个Signleton程序,说明特点?
- 懒汉(考虑线程同步问题)和恶汉都写上
- 特点:构造方法私有化, 类内部提供static方法获取实例化对象,不管外部如何操作永远只有一个实例化对象。
多例设计
单例设计是只保留一个实例化对象,多例设计是指保留多个实例化对象,如定义个描述性别的类,则对象只有两个(男,女)
class Color{
private static final Color RED = new Color("red");
private static final Color GREEN = new Color("Gre");
private static final Color BLUE = new Color("Blu");
private Color(String title){ //构造方法私有化
this.title = title;
}
public static Color getInstance(String color){
switch(color){
case "red": return RED;
case "Gre": return GREEN;
case "Blu": return BLUE;
default:return null;
}
}
public String toString(){
return this.title;
}
}
多例设计与单例设计本质是相同的,一定会在内部提供有static方法以返回实例化对象。