您现在的位置是:首页 > JAVA教程 > 正文

Java 中常用的设计模式详解及应用场景

编辑:本站更新:2024-05-09 03:23:05人气:5687
设计模式在软件开发中占据着至关重要的地位,特别是在 Java 这样的面向对象编程语言里。它们是解决常见问题的最佳实践和可重用解决方案的蓝图,并且有助于提高代码质量、复用性和理解性。本文将深入探讨几种常用的Java设计模式及其实际应用场景。

1. **单例模式(Singleton)**
单例模式确保一个类只有一个实例存在并提供全局访问点。例如,在多线程环境下的数据库连接池或者应用中的配置管理器等场景下常使用该模式以保证资源唯一与共享安全。

java

public class Singleton {
private static volatile Singleton instance;

private Singleton() {}

public synchronized static Singleton getInstance() {
if (instance == null) {
instance = new Singleton();
}

return instance;
}
}


2. **工厂方法模式(Factory Method)**
此模式定义了一个用于创建产品族的接口,由子类决定具体的产品类型。比如 JDBC 中获取不同类型的 Connection 对象时就采用了这种模式:

java

abstract class DatabaseConnectionFactory {
abstract DatabaseConnection createDatabaseConnection();
}

class MySQLConnectionFactory extends DatabaseConnectionFactory {
@Override
DatabaseConnection createDatabaseConnection() { /* 创建MySQL连接 */ }
}

// 使用者无需知道如何建立特定种类的连接,只需调用对应工厂的方法即可获得所需对象.


3. **建造者模式(Builder Pattern)**
当构造函数参数过多或希望解耦构建过程步骤的时候,可以采用建造者模式来实现复杂对象的创建工作流。如 `StringBuilder` 或复杂的订单系统的下单流程可能就会运用到这个模式:

java

interface PizzaBuilderInterface {
void buildDough(); // 设置面团
void addTopping(String topping); // 添加配料
Pizza getPizza(); // 获取最终Pizza实体
}

class HawaiianPizzaBuilder implements PizzaBuilderInterface {...}
...
HawaiianPizza pizza = new HawaiianPizza.HawaiianPizzaBuilder().buildDough()
.addTopping("Ham")
.addTopping("Pineapple").getPizza();

4. **代理模式(Proxy Pattern)**

代理模式为其他对象提供了替代控制层,主要用于增强原功能或是增加额外操作,不影响原有结构的情况下扩展其行为能力。如同步化代理处理并发请求,远程服务(Remote Proxy)进行网络通信优化等问题上广泛应用:

java
public interface ImageLoader{
void loadImage(Image img);
}

public class RealImageLoader implements ImageLoader{...}

public class CachedImageLoader implements ImageLoader{
private final ImageLoader realLoader;

public CachedImageLoader(){
this.realLoader = new RealImageLoader();
}

@Override
public void loadImage(Image img){
if(cache.containsKey(img.getUrl())){
System.out.println("Load from cache");
}else{
realLoader.loadImage(img);
cache.put(img.getUrl(),img.getData());
}
}
}


5. **观察者模式(Observable/Observer pattern)**

通过订阅-发布机制实现实体间的联动更新。在一个主题状态变化时自动通知所有关注它的观察者们。广泛应用于事件驱动系统以及用户界面组件的通知机制等领域:

java
import java.util.Observable;
import java.util.Observer;

class WeatherData extends Observable {
...
public void measurementsChanged(float temp, float humidity, float pressure) {
setChanged();
notifyObservers(temp + "F degrees and "+humidity+"% humidity.");
}

...
}

class CurrentConditionsDisplay implements Observer {
...
public void update(Observable wd, Object args) {
display(args.toString()); // 更新显示内容
}
...
}

WeatherData weatherData = new WeatherData();
CurrentConditionsDisplay currentDislay = new CurrentConditionsDisplay(weatherData);

weatherData.measurementsChanged(...); // 当测量值改变后会触发update回调给当前条件显示器刷新数据
```

以上仅为部分常见的Java设计模式示例,实际上还有诸如策略(strategy),模板方法(template method), 装饰(decorator),适配器(adapter)等多种实用设计模式等待开发者去探索和灵活运用。熟练掌握这些设计模式能帮助我们编写出更易于维护和拓展的企业级应用程序。
关注公众号

www.php580.com PHP工作室 - 全面的PHP教程、实例、框架与实战资源

PHP学习网是专注于PHP技术学习的一站式在线平台,提供丰富全面的PHP教程、深入浅出的实例解析、主流PHP框架详解及实战应用,并涵盖PHP面试指南、最新资讯和活跃的PHP开发者社区。无论您是初学者还是进阶者,这里都有助于提升您的PHP编程技能。

转载内容版权归作者及来源网站所有,本站原创内容转载请注明来源。

最新推荐

本月推荐