Java设计模式与示例:从A到Z

面向初学者的在线Python训练器

轻松学习Python,无需理论负担。在浏览器中直接解决带自动检查的实践任务,无需安装任何东西。

开始课程

Java设计模式:带示例的完整指南



设计模式(design patterns)是软件开发中常见问题的经过验证的解决方案。在Java这种强类型面向对象语言中,模式尤其有效。它们有助于使代码灵活、可重用且易于维护。在本文中,我们将根据GoF分类,通过Java实际示例,解析三大类模式:创建型、结构型和行为型。



1. 创建型模式(Creational Patterns)

这些模式管理对象的创建过程,使系统独立于对象的具体创建、组合和表示方式。



1.1. Singleton(单例)

确保一个类只有一个实例,并提供一个全局访问点。经典示例包括数据库连接池或日志记录器。

public class DatabaseConnection {    private static volatile DatabaseConnection instance;    private String connectionString;

private DatabaseConnection(String connectionString) { this.connectionString = connectionString; }

public static DatabaseConnection getInstance(String connectionString) { if (instance == null) { synchronized (DatabaseConnection.class) { if (instance == null) { instance = new DatabaseConnection(connectionString); } } } return instance; }

public void connect() { System.out.println("Connected to: " + connectionString); }}

// 使用DatabaseConnection conn = DatabaseConnection.getInstance("jdbc:mysql://localhost:3306/mydb");conn.connect();


1.2. Factory Method(工厂方法)

定义一个创建对象的接口,但允许子类更改所创建对象的类型。当对象的确切类型事先未知时,此模式非常适用。

interface Transport {    void deliver();}

class Truck implements Transport { public void deliver() { System.out.println("通过陆路用卡车运输"); }}

class Ship implements Transport { public void deliver() { System.out.println("通过海路用船舶运输"); }}

abstract class Logistics { abstract Transport createTransport(); public void planDelivery() { Transport t = createTransport(); t.deliver(); }}

class RoadLogistics extends Logistics { Transport createTransport() { return new Truck(); }}

class SeaLogistics extends Logistics { Transport createTransport() { return new Ship(); }}

// 使用Logistics logistics = new RoadLogistics();logistics.planDelivery(); // 输出:通过陆路用卡车运输


2. 结构型模式(Structural Patterns)

负责类和对象的组合,帮助从简单组件构建复杂结构。



2.1. Adapter(适配器)

允许接口不兼容的对象协同工作。常用于集成旧代码(legacy)与新代码。

// 旧接口interface OldSystem {    String getDataInXML();}

// 新接口interface NewSystem { String getDataInJSON();}

// 旧系统实现class LegacySystem implements OldSystem { public String getDataInXML() { return "<data>Hello</data>"; }}

// 适配器class XMLToJSONAdapter implements NewSystem { private OldSystem oldSystem; public XMLToJSONAdapter(OldSystem oldSystem) { this.oldSystem = oldSystem; } public String getDataInJSON() { String xml = oldSystem.getDataInXML(); return "{\\"data\\": \\"" + xml.replaceAll("<.*?>", "") + "\\"}"; }}

// 使

博客

书籍推荐