下面是单例模式和模板方法在Java中的代码实现示例:
单例模式是一种设计模式,它的目的是确保某个类只有一个实例,并提供对该实例的全局访问点。该模式常被用于管理全局状态、资源池等场景,可以有效地控制对象的创建和使用。在单例模式中,通常将构造函数设为私有的,以防止外部代码创建多个实例。
- 单例模式的Java代码实现
public class Singleton {
private static Singleton instance;
private Singleton() {
// 防止外部实例化
}
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
在上面的代码中,我们使用了私有的构造函数来防止外部实例化。getInstance方法通过判断instance是否为null来控制实例的创建,如果instance为null,则创建一个新的实例,否则直接返回已有的实例。该代码实现可以确保在整个应用程序中只有一个Singleton实例存在。
- 模板方法的Java代码实现
模板方法是一种行为型设计模式,它定义了一个算法框架,将某些步骤的具体实现延迟到子类中。在模板方法中,将算法的核心步骤抽象出来,形成一个模板,而将具体的实现交给子类去完成。这样可以使得算法的整体结构稳定不变,同时又能够灵活地扩展和修改子类中的具体实现。模板方法常被用于定义框架或库中的算法,例如排序、搜索等操作。
public abstract class SortAlgorithm {
public final void sort(int[] array) {
if (array == null || array.length <= 1) {
return;
}
doSort(array);
}
protected abstract void doSort(int[] array);
}
public class BubbleSort extends SortAlgorithm {
@Override
protected void doSort(int[] array) {
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array.length - i - 1; j++) {
if (array[j] > array[j + 1]) {
int temp = array[j];
array[j] = array[j + 1];
array[j + 1] = temp;
}
}
}
}
}
public class QuickSort extends SortAlgorithm {
@Override
protected void doSort(int[] array) {
quickSort(array, 0, array.length - 1);
}
private void quickSort(int[] array, int left, int right) {
if (left >= right) {
return;
}
int pivot = partition(array, left, right);
quickSort(array, left, pivot - 1);
quickSort(array, pivot + 1, right);
}
private int partition(int[] array, int left, int right) {
int pivot = array[right];
int i = left - 1;
for (int j = left; j < right; j++) {
if (array[j] <= pivot) {
i++;
int temp = array[i];
array[i] = array[j];
array[j] = temp;
}
}
int temp = array[i + 1];
array[i + 1] = array[right];
array[right] = temp;
return i + 1;
}
}
在上面的代码中,我们定义了一个抽象类SortAlgorithm,其中包含一个final的sort方法和一个抽象的doSort方法。sort方法是一个模板方法,它定义了算法的框架,调用了doSort方法完成具体实现。doSort方法是一个抽象方法,需要子类去实现具体的排序算法。我们创建了BubbleSort和QuickSort两个子类,它们分别实现了doSort方法来完成具体的排序算法。这样,我们可以使用SortAlgorithm类来定义排序算法的框架,同时又可以灵活地扩展和修改具体的排序算法实现。