工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 【6月更文挑战第20天】工厂模式简化对象创建,根据参数或条件生成MySQL或Oracle数据库连接。`DatabaseConnectionFactory`作为工厂,动态返回具体连接类型。装饰器模式则用于运行时动态增加对象功能,如`LoggingDecorator`为`Runnable`对象添加日志记录,保持代码整洁。在`Main`类中展示了如何使用这两种模式。

工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式。在实际应用中,我们常常需要根据不同的条件或参数来创建不同的对象。工厂模式就是为了解决这个问题而提出的。

例如,在Java中,我们可以使用工厂模式来创建不同类型的数据库连接:

public interface DatabaseConnection {
   
    void connect();
}

public class MySQLDatabaseConnection implements DatabaseConnection {
   
    @Override
    public void connect() {
   
        System.out.println("Connecting to MySQL database...");
    }
}

public class OracleDatabaseConnection implements DatabaseConnection {
   
    @Override
    public void connect() {
   
        System.out.println("Connecting to Oracle database...");
    }
}

public class DatabaseConnectionFactory {
   
    public static DatabaseConnection createDatabaseConnection(String type) {
   
        if ("mysql".equalsIgnoreCase(type)) {
   
            return new MySQLDatabaseConnection();
        } else if ("oracle".equalsIgnoreCase(type)) {
   
            return new OracleDatabaseConnection();
        } else {
   
            throw new IllegalArgumentException("Invalid database type");
        }
    }
}

public class Main {
   
    public static void main(String[] args) {
   
        DatabaseConnection mysqlConnection = DatabaseConnectionFactory.createDatabaseConnection("mysql");
        mysqlConnection.connect();

        DatabaseConnection oracleConnection = DatabaseConnectionFactory.createDatabaseConnection("oracle");
        oracleConnection.connect();
    }
}

在这个例子中,DatabaseConnectionFactory是一个工厂类,它根据传入的类型字符串创建相应的数据库连接对象。

装饰器模式的应用场景与实现:
装饰器模式是一种结构型设计模式,它允许我们在运行时给一个对象动态地添加新的功能,同时保持代码的可读性和简洁性。

以下是一个简单的Java装饰器,用于添加日志记录功能到现有方法上:

public abstract class LoggingDecorator {
   
    protected final Object component;

    public LoggingDecorator(Object component) {
   
        this.component = component;
    }

    public void log(String message) {
   
        System.out.println("Logging: " + message);
    }

    public abstract void execute();
}

public class LoggingExecutor extends LoggingDecorator {
   
    public LoggingExecutor(Object component) {
   
        super(component);
    }

    @Override
    public void execute() {
   
        log("Starting execution...");
        ((Runnable) component).run();
        log("Finished execution.");
    }
}

public class MyTask implements Runnable {
   
    @Override
    public void run() {
   
        System.out.println("Running my task...");
    }
}

public class Main {
   
    public static void main(String[] args) {
   
        Runnable myTask = new MyTask();
        Runnable loggingTask = new LoggingExecutor(myTask);

        loggingTask.run();
    }
}

在这个例子中,LoggingExecutor是一个装饰器类,它通过包装原始的任务对象并添加日志记录功能。当我们调用loggingTask.run()时,会先打印出"Starting execution...",然后执行原始任务,最后打印出"Finished execution."。

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
28天前
|
设计模式 Java
【设计模式】工厂模式(定义 | 特点 | Demo入门讲解)
【设计模式】工厂模式(定义 | 特点 | Demo入门讲解)
42 2
|
2月前
|
设计模式
设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)
这篇文章详细解释了工厂模式,包括简单工厂、工厂方法和抽象工厂三种类型。每种模式都通过代码示例展示了其应用场景和实现方法,并比较了它们之间的差异。简单工厂模式通过一个工厂类来创建各种产品;工厂方法模式通过定义一个创建对象的接口,由子类决定实例化哪个类;抽象工厂模式提供一个创建相关或依赖对象家族的接口,而不需要明确指定具体类。
设计模式-工厂模式 Factory Pattern(简单工厂、工厂方法、抽象工厂)
|
3月前
|
设计模式 Java
Java 设计模式之谜:工厂模式与抽象工厂模式究竟隐藏着怎样的神奇力量?
【8月更文挑战第30天】在Java编程中,设计模式为常见问题提供了高效解决方案。工厂模式与抽象工厂模式是常用的对象创建型设计模式,能显著提升代码的灵活性、可维护性和可扩展性。工厂模式通过定义创建对象的接口让子类决定实例化哪个类;而抽象工厂模式则进一步提供了一个创建一系列相关或相互依赖对象的接口,无需指定具体类。这种方式使得系统更易于扩展和维护。
41 1
|
3月前
|
设计模式 算法 开发者
深入理解工厂模式与策略模式:设计模式的灵活应用
深入理解工厂模式与策略模式:设计模式的灵活应用
|
3月前
|
设计模式 uml C语言
设计模式----------工厂模式之简单工厂模式(创建型)
这篇文章详细介绍了简单工厂模式,包括其定义、应用场景、UML类图、通用代码实现、运行结果、实际应用例子,以及如何通过反射机制实现对象创建,从而提高代码的扩展性和维护性。
设计模式----------工厂模式之简单工厂模式(创建型)
|
3月前
|
设计模式 uml
设计模式-------------工厂模式之工厂方法模式(创建型)
工厂方法模式是一种创建型设计模式,它通过定义一个用于创建对象的接口,让子类决定实例化哪一个类,从而实现类的实例化推迟到子类中进行,提高了系统的灵活性和可扩展性。
|
3月前
|
设计模式 Java C语言
设计模式-----------工厂模式之抽象工厂模式(创建型)
抽象工厂模式是一种创建型设计模式,它提供了一个接口用于创建一系列相关或相互依赖的对象,而无需指定具体类,从而增强了程序的可扩展性并确保客户端只使用同一产品族的产品。
设计模式-----------工厂模式之抽象工厂模式(创建型)
|
4月前
|
设计模式 C++
C++一分钟之-设计模式:工厂模式与抽象工厂
【7月更文挑战第14天】设计模式是解决软件设计问题的通用方案。工厂模式与抽象工厂模式是创建型模式,用于对象创建而不暴露创建逻辑。工厂模式推迟实例化到子类,但过度使用会增加复杂性。抽象工厂则创建相关对象族,但过度抽象可能造成不必要的复杂度。两者均应按需使用,确保设计灵活性。代码示例展示了C++中如何实现这两种模式。
41 3
|
4月前
|
设计模式 安全 Java
Java面试题:设计模式如单例模式、工厂模式、观察者模式等在多线程环境下线程安全问题,Java内存模型定义了线程如何与内存交互,包括原子性、可见性、有序性,并发框架提供了更高层次的并发任务处理能力
Java面试题:设计模式如单例模式、工厂模式、观察者模式等在多线程环境下线程安全问题,Java内存模型定义了线程如何与内存交互,包括原子性、可见性、有序性,并发框架提供了更高层次的并发任务处理能力
75 1
|
5月前
|
设计模式 Java 数据库连接
【Java设计模式 - 创建型模式2】工厂模式
【Java设计模式 - 创建型模式2】工厂模式
30 0