⼯⼚⽅法模式

工厂方法模式(Factory Method Pattern)是一种创建型设计模式,它定义了一个创建对象的接口,但让实现这个接口的类来决定实例化哪一个类。工厂方法模式让类的实例化推迟到子类进行。

工厂方法模式的主要作用包括:

  1. 封装创建逻辑:将对象的创建逻辑封装在工厂类中,使得客户端不需要知道具体的实现类,只需要知道工厂类即可。

  2. 提高系统的灵活性:通过工厂方法,可以在不修改已有代码的情况下引入新的类。

  3. 解耦:将具体的产品类与使用产品类的客户代码分离,使得客户代码依赖于抽象,而不是具体实现。

  4. 易于扩展:当需要新增产品时,只需要添加一个具体的产品类和一个相应的工厂类,无需修改现有的工厂类。

工厂方法模式通常包含以下几个角色:

  • 工厂接口(Factory Interface):定义创建产品对象的接口。
  • 具体工厂(Concrete Factory):实现工厂接口,生成具体的产品实例。
  • 抽象产品(Abstract Product):定义产品的接口,规定了产品的公共接口。
  • 具体产品(Concrete Product):实现抽象产品的接口,是工厂方法模式的创建对象。

工厂方法模式在软件开发中非常常见,比如在创建数据库连接、文件操作、GUI组件等场景中都有应用。通过使用工厂方法模式,可以提高代码的可维护性和可扩展性。

1、普通⼯⼚模式:建⽴⼀个⼯⼚类,对实现了同⼀接⼝的⼀些类进⾏实例的创建;

2、多个⼯⼚⽅法模式:提供多个⼯⼚⽅法,分别创建对象

package com.huawei.od.huawei.pattern;

/**
 * @ClassName: FactoryMethodPattern
 * @author: zengxianjin
 * @Desc: ⼯⼚⽅法模式
 * @create: 2024-09-04 15:36
 * @version: V1.0
 **/
public class FactoryMethodPattern {
    public static void main(String[] args) {
        NormalFactoryPattern nfp = new NormalFactoryPattern();
        System.out.println("普通工厂模式======================开始");
        nfp.produce("mail").send("普通⼯⼚模式 mail content");
        nfp.produce("sms").send("普通⼯⼚模式 sms content");
        System.out.println("多工厂方法模式======================开始");
        moreFactoryMethodPattern mfp = new moreFactoryMethodPattern();
        mfp.produceMail().send("多工厂方法模式 mail content");
        mfp.produceSms().send("多工厂方法模式 sms content");
    }
}

//普通⼯⼚模式:建⽴⼀个⼯⼚类,对实现了同⼀接⼝的⼀些类进⾏实例的创建
class NormalFactoryPattern {
    public Sender produce(String type) {
        if ("mail".equals(type)) {
            return new MailSender();
        } else if ("sms".equals(type)) {
            return new SmsSender();
        } else {
            System.out.println("请输入正确的类型!");
            return null;
        }
    }
}

//多个⼯⼚⽅法模式:提供多个⼯⼚⽅法,分别创建对象;
class moreFactoryMethodPattern {
    public Sender produceMail() {
        return new MailSender();
    }

    public Sender produceSms() {
        return new SmsSender();
    }
}

//发送邮件实现类
class MailSender implements Sender {

    @Override
    public void send(String msg) {
        System.out.println("mail sender: " + msg);
    }
}

//发送短信实现类
class SmsSender implements Sender {

    @Override
    public void send(String msg) {
        System.out.println("sms sender: " + msg);
    }
}

//发送消息的接⼝
interface Sender {
    //发送消息
    void send(String msg);
}

你可能感兴趣的:(#,设计模式,java,开发语言)