设计模式总览:Java开发者必知的经典策略

在Java编程领域,设计模式是提高代码质量、优化系统架构的重要工具。设计模式不仅可以帮助我们解决常见问题,还能提高代码的可读性、可维护性和可扩展性。本文将为您总览Java中常见的几种设计模式,帮助您更好地掌握这些经典策略。
一、单例模式(Singleton)
单例模式确保一个类只有一个实例,并提供一个全局访问点。在Java中,实现单例模式主要有以下几种方式:
1. 懒汉式(懒加载):在类加载时不初始化,第一次使用时再创建实例。
```java
public class Singleton {
private static Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}
return instance;
}
}
```
2. 饿汉式(饿加载):在类加载时就初始化,保证只有一个实例。
```java
public class Singleton {
private static final Singleton instance = new Singleton();
private Singleton() {}
public static Singleton getInstance() {
return instance;
}
}
```
3. 双重校验锁(Double-Checked Locking):结合懒汉式和同步代码块,提高性能。
```java
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;
}
}
```
二、工厂模式(Factory Method)
工厂模式定义了一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
```java
public interface Product {
void use();
}
public class ConcreteProductA implements Product {
@Override
public void use() {
System.out.println("使用产品A");
}
}
public class ConcreteProductB implements Product {
@Override
public void use() {
System.out.println("使用产品B");
}
}
public abstract class Creator {
public abstract Product factoryMethod();
}
public class ConcreteCreatorA extends Creator {
@Override
public Product factoryMethod() {
return new ConcreteProductA();
}
}
public class ConcreteCreatorB extends Creator {
@Override
public Product factoryMethod() {
return new ConcreteProductB();
}
}
```
三、建造者模式(Builder)
建造者模式将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
```java
public class Person {
private String name;
private int age;
private String address;
public Person(Builder builder) {
this.name = builder.name;
this.age = builder.age;
this.address = builder.address;
}
public static class Builder {
private String name;
private int age;
private String address;
public Builder setName(String name) {
this.name = name;
return this;
}
public Builder setAge(int age) {
this.age = age;
return this;
}
public Builder setAddress(String address) {
this.address = address;
return this;
}
public Person build() {
return new Person(this);
}
}
}
```
四、代理模式(Proxy)
代理模式为其他对象提供一种代理以控制对这个对象的访问。
```java
public interface Subject {
void request();
}
public class RealSubject implements Subject {
@Override
public void request() {
System.out.println("真实主题处理请求");
}
}
public class Proxy implements Subject {
private RealSubject realSubject;
public Proxy(RealSubject realSubject) {
this.realSubject = realSubject;
}
@Override
public void request() {
beforeRequest();
realSubject.request();
afterRequest();
}
private void beforeRequest() {
System.out.println("代理预处理");
}
private void afterRequest() {
System.out.println("代理后处理");
}
}
```
五、观察者模式(Observer)
观察者模式定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并自动更新。
```java
public interface Observer {
void update(String message);
}
public class ConcreteObserver implements Observer {
@Override
public void update(String message) {
System.out.println("观察者" + Thread.currentThread().getName() + "收到通知:" + message);
}
}
public class Subject {
private List
public void addObserver(Observer observer) {
observers.add(observer);
}
public void removeObserver(Observer observer) {
observers.remove(observer);
}
public void notifyObservers(String message) {
for (Observer observer : observers) {
observer.update(message);
}
}
}
```
总结
本文总览了Java中常见的几种设计模式,包括单例模式、工厂模式、建造者模式、代理模式和观察者模式。掌握这些设计模式对于Java开发者来说至关重要,它们可以帮助我们更好地解决实际问题,提高代码质量。在实际开发过程中,我们需要根据具体需求选择合适的设计模式,以达到最佳效果。






