1.多例设计模式的作用
多例模式,是一种常用的软件设计模式。通过多例模式可以保证系统中,应用该模式的类有固定数量的实例。多例类要自我创建并管理自己的实例,还要向外界提供获取本类实例的方法。
使用场景:线程池
线程池=Executors.newFixedThreadPool(3);
2.实现步骤
a.创建一个类,将构造方法私有化,使其不能在类的外部通过new关键字实例化该类对象。
b.在类中定义该类被创建对象的总数量。
c.在类中定义存放类实例的list集合。
d.在类中提供静态代码块,在静态代码块中创建类的实例。
e.提供获取类实例的静态方法。
3.实现代码
import java.util.ArrayList;
import java.util.List;
import java.util.Random;
public class Multition {
// 定义该类被创建的总数量
private static final int maxCount = 3;
// 定义存放类实例的list集合
private static List instanceList = new ArrayList();
// 构造方法私有化,不允许外界创建本类对象
private Multition() {
}
static {
// 创建本类的多个实例,并存放到list集合中
for (int i = 0; i < maxCount; i++) {
Multition multition = new Multition();
instanceList.add(multition);
}
}
// 给外界提供一个获取类对象的方法
public static Multition getMultition(){
Random random = new Random();
// 生成一个随机数
int i = random.nextInt(maxCount);
// 从list集合中随机取出一个进行使用
return (Multition)instanceList.get(i);
}
}
4.测试结果
public static void main(String[] args) {
// 编写一个循环从中获取类对象
for (int i = 0; i < 10; i++) {
Multition multition = Multition.getMultition();
System.out.println(multition);
}
}
从输出结果上看只会出现三种对象。
需求:
定义一个类,用来描述公司的公用车。固定只能有3辆车。使用多例模式进行设计该类。
- 定义静态字段,用来设定实例个数
- 定义静态的集合,用来保存多例
- 私有化构造方法
- 静态代码块中进行对多例初始化
- 提供静态方法将某个实例返回
public class Demo01 {
public static void main(String[] args) {
for (int i = 0; i < 10; i++) {
Car car = Car.getInstance();
System.out.println("car = " + car);
}
}
}
//定义一个类,用来描述公司的车。固定只能有3辆车。使用多例模式进行设计该类。
class Car {
//1. 定义静态字段,用来设定实例个数
//2. 定义静态的集合,用来保存多例
//3. 私有化构造方法
private static int count = 3;
private static ArrayList<Car> carList = new ArrayList<>();
private Car() {
}
//静态代码块
//4. 静态代码块中进行对多例初始化
static {
for (int i = 0; i < count; i++) {
carList.add(new Car());
}
}
//5. 提供静态方法将某个实例返回
public static Car getInstance() {
int index = new Random().nextInt(count);
Car car = carList.get(index);
return car;
}
}
car = _12多例设计模式.Car@14ae5a5
car = _12多例设计模式.Car@7f31245a
car = _12多例设计模式.Car@14ae5a5
car = _12多例设计模式.Car@14ae5a5
car = _12多例设计模式.Car@7f31245a
car = _12多例设计模式.Car@14ae5a5
car = _12多例设计模式.Car@14ae5a5
car = _12多例设计模式.Car@6d6f6e28
car = _12多例设计模式.Car@14ae5a5
car = _12多例设计模式.Car@6d6f6e28
5.小结
多例模式可以保证系统中一个类有固定个数的实例, 在实现需求的基础上, 能够提高实例的复用性。
实现多例模式的步骤:
- 创建一个类, 将构造方法私有化,使其不能在类的外部通过new关键字实例化该类对象。
- 在类中定义该类被创建的总数量
- 在类中定义存放类实例的list集合
- 在类中提供静态代码块,在静态代码块中创建类的实例
- 提供获取类实例的静态方法
枚举也是一种多例模式。