Java设计模式之-工厂方法模式

本文详细介绍了Java设计模式中的工厂方法模式,包括普通工厂模式、多个工厂方法模式及静态工厂方法模式。通过发送邮件和短信的例子,展示了不同模式的具体实现方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Java设计模式之-工厂方法模式

工厂方法模式分为三种:普通工厂模式、多个工厂方法模式、静态工厂方法模式。

1、普通工厂模式:以发邮件和短信的例子说明。
结构如下图所示

这里写图片描述

主要分为四个步骤:创建各实例的共同接口、创建各功能实例、创建工厂、主程序。请看如下示例代码

public class FactoryMethodModel {

    public static void main(String[] args) {

        String type="mail";
        SendFactory factory=new SendFactory();
        Sender sender=factory.produce(type);
        sender.send();
    }
}

// 创建二者的共同接口
interface Sender
{
    void send();
}


// 创建实现类 MailSender
class MailSender implements Sender {  
    @Override  
    public void send() {  
        System.out.println("this is Mailsender!");  
    }  
}  

//创建实现类 SmsSender
class SmsSender implements Sender{
    public void send(){
        System.out.println("this is SmsSender");
    }
}


// 创建工厂类
class SendFactory{
    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;
        }
    }
}

输出:this is Mailsender!

2、多个工厂方法模式:

是对普通工厂方法模式的改进,在普通工厂方法模式中,如果传递的字符串出错,则不能正确创建对象,而多个工厂方法模式是提供多个工厂方法,分别创建对象。关系图:

这里写图片描述

将上面的代码修改如下:

public class FactoryMethodModel {

    public static void main(String[] args) {

        SendFactory factory=new SendFactory();

        Sender sender1=factory.produceMailSender();
        Sender sender2=factory.produceSmsSender();
        sender1.send();
        sender2.send();
    }
}

// 创建二者的共同接口
interface Sender
{
    void send();
}


// 创建实现类 MailSender
class MailSender implements Sender {  
    @Override  
    public void send() {  
        System.out.println("this is Mailsender!");  
    }  
}  

//创建实现类 SmsSender
class SmsSender implements Sender{
    public void send(){
        System.out.println("this is SmsSender");
    }
}


// 创建工厂类,有多个工厂方法,分别用来创建不同的对象
class SendFactory{
    public Sender produceMailSender(){
        return new MailSender();
    }

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

输出结果: this is Mailsender!
this is SmsSender

3、静态工厂方法模式:
将上面的多个工厂方法模式里的方法置为静态的,不需要创建实例,直接调用即可。

public class FactoryMethodModel {

    public static void main(String[] args) {

        Sender sender1=SendFactory.produceMailSender();
        Sender sender2=SendFactory.produceSmsSender();
        sender1.send();
        sender2.send();
    }
}

// 创建二者的共同接口
interface Sender
{
    void send();
}


// 创建实现类 MailSender
class MailSender implements Sender {  
    @Override  
    public void send() {  
        System.out.println("this is Mailsender!");  
    }  
}  

//创建实现类 SmsSender
class SmsSender implements Sender{
    public void send(){
        System.out.println("this is SmsSender");
    }
}


// 创建工厂类,有多个工厂方法,分别用来创建不同的对象
class SendFactory{
    public static Sender produceMailSender(){
        return new MailSender();
    }

    public static Sender produceSmsSender(){
        return new SmsSender();
    }
}

输出结果: this is Mailsender!
this is SmsSender

总体来说,工厂模式适合:凡是出现了大量的产品需要创建,并且具有共同的接口时,可以通过工厂方法模式进行创建。在以上的三种模式中,第一种如果传入的字符串有误,不能正确创建对象,第三种相对于第二种,不需要实例化工厂类,所以,大多数情况下,我们会选用第三种——静态工厂方法模式。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值