策略模式
是一种行为模式,可以避免使用大量的if else、switch。
组成
- 策略的通用接口
- 具体策略的实现
- 调用具体策略
// 策略接口
interface Strategy {
void execute();
}
// 具体策略A
class ConcreteStrategyA implements Strategy {
@Override
public void execute() {
System.out.println("Executing Strategy A");
}
}
// 具体策略B
class ConcreteStrategyB implements Strategy {
@Override
public void execute() {
System.out.println("Executing Strategy B");
}
}
// 上下文类
class Context {
private Strategy strategy;
public void setStrategy(Strategy strategy) {
this.strategy = strategy;
}
public void executeStrategy() {
if (strategy != null) {
strategy.execute();
} else {
System.out.println("No strategy set");
}
}
}
// 客户端
public class Main {
public static void main(String[] args) {
Context context = new Context();
Strategy strategyA = new ConcreteStrategyA();
Strategy strategyB = new ConcreteStrategyB();
context.setStrategy(strategyA);
context.executeStrategy(); // Output: Executing Strategy A
context.setStrategy(strategyB);
context.executeStrategy(); // Output: Executing Strategy B
}
}
模板方法模式
是一种行为模式,在抽象类中定义业务逻辑的骨架,具体步骤由子类实现,达到代码复用和拓展的目的。
组成
- 定义模板抽象方法
- 实现抽象方法
- 调用
// 抽象类
abstract class DataProcessor {
// 模板方法
public final void process() {
readData();
processData();
writeData();
}
protected abstract void readData(); // 读取数据
protected abstract void processData(); // 处理数据
protected void writeData() { // 写入数据
System.out.println("Writing data to output.");
}
}
// 具体实现类A
class CSVDataProcessor extends DataProcessor {
@Override
protected void readData() {
System.out.println("Reading data from CSV file.");
}
@Override
protected void processData() {
System.out.println("Processing CSV data.");
}
}
// 具体实现类B
class JSONDataProcessor extends DataProcessor {
@Override
protected void readData() {
System.out.println("Reading data from JSON file.");
}
@Override
protected void processData() {
System.out.println("Processing JSON data.");
}
}
// 客户端
public class Main {
public static void main(String[] args) {
DataProcessor csvProcessor = new CSVDataProcessor();
csvProcessor.process();
DataProcessor jsonProcessor = new JSONDataProcessor();
jsonProcessor.process();
}
}
单例模式
常见的实现方式
- 饿汉式:类加载时就创建,线程安全,但是有可能会浪费资源
public class Singleton {
private static final Singleton instance = new Singleton();private Singleton() {}public static Singleton getInstance() {return instance;}
}
- 懒汉式:首次访问时创建,节约资源,但是线程不安全
public class Singleton {
private static Singleton instance;private Singleton() {}public static Singleton getInstance() {if (instance == null) {instance = new Singleton();
}return instance;}
}
- 双重检查锁定:在懒汉式的基础上优化,只在第一次检查实例为空时加锁
public class Singleton {
private static volatile Singleton instance;private Singleton() {}public static Singleton getInstance() {if (instance == null) {synchronized (Singleton.class) {
if (instance == null) {instance = new Singleton();}}}return instance;
}
}
- 静态内部类:利用类加载机制,实现懒加载和线程安全
public class Singleton {
private Singleton() {}private static class Holder {
private static final Singleton INSTANCE = new Singleton();}public static Singleton getInstance() {
return Holder.INSTANCE; }
}
- 枚举单例:通过枚举实现单例
public enum Singleton {
INSTANCE;public void bizMethod() { // 一些业务逻辑方法 }
}
//使用
Singleton singleton = Singleton.INSTANCE;
singleton.bizMethod();
