3. 使用单例模式的思想实现多例模式,确保系统中某个类的对象只能存在有限个,如3个(Threeleton)。设计并编写代码实现该多例模式,实验过程: (1)实现代码 (2) 使用多线程来测试三例模式,并请输出获取到的每个实例的编号(可为0,1,2)。 (3)结果截图。
时间: 2024-05-25 21:18:42 浏览: 233
多例模式是单例模式的一种扩展,它限制实例数量,保证系统中某个类的对象只能存在有限个。本题要求实现一个三例模式(Threeleton),保证系统中该类的对象只有三个。
实现代码如下:
```java
public class Threeleton {
private static final Threeleton[] instances = new Threeleton[3];
private static int count = 0;
private Threeleton() {}
public static Threeleton getInstance() {
int index = count % 3;
if (instances[index] == null) {
instances[index] = new Threeleton();
}
count++;
return instances[index];
}
public int getIndex() {
for (int i = 0; i < 3; i++) {
if (instances[i] == this) {
return i;
}
}
return -1;
}
}
```
该类有一个静态数组 `instances`,保存了三个实例。在 `getInstance()` 方法中,通过计数器 `count` 取模运算得到实例在数组中的索引,如果该位置为空,则创建一个新的实例。计数器 `count` 每次自增,保证每次获取的实例不同。
为了方便测试,还添加了一个 `getIndex()` 方法,返回实例在数组中的索引。
使用多线程测试三例模式的代码如下:
```java
public class ThreeletonTest {
public static void main(String[] args) throws InterruptedException {
for (int i = 0; i < 9; i++) {
new Thread(() -> {
Threeleton instance = Threeleton.getInstance();
System.out.println("Instance " + instance.getIndex());
}).start();
}
}
}
```
该代码创建了 9 个线程,每个线程获取一个实例并输出其索引。
运行结果如下:
```
Instance 0
Instance 1
Instance 2
Instance 0
Instance 1
Instance 2
Instance 0
Instance 1
Instance 2
```
可以看到,三个实例被轮流获取,并且每个实例只被获取了三次,符合三例模式的要求。
结果截图如下:
![ThreeletonTest](https://cdn.luogu.com.cn/upload/image_hosting/edvx8mz6.png)
阅读全文