工厂模式

本文深入解析工厂模式,包括工厂方法模式和抽象工厂模式的实现与应用。通过实例展示普通工厂模式、多个工厂方法模式及静态工厂方法模式的区别,以及抽象工厂模式如何解决普通工厂模式的问题。

工厂模式分为 工厂方法模式 和 抽象工厂模式 :

工厂方法模式

分为:

  • 普通工厂模式 

就是建立一个工厂类,对于实现了同一接口的一些类进行实例的创建多个工厂方法模式

  • 多个工厂方法模式

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

  • 静态工厂方法模式

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

普通工厂模式:

public interface Sender {
    void send(String msg);
}

public class SmsSender implements Sender{

    @Override
    public void send(String msg) {
        Log.i("sml", "send: 短信发送消息"+msg);
    }
}

public class MailSender implements Sender{

    @Override
    public void send(String msg) {
        Log.i("sml", "send: 邮件发送消息"+msg);
    }
}

public class SenderFactory {
    public static Sender sendMsg(String type) {
        if (type.equals("mail")) {
            return new MailSender();
        } else if (type.equals("sms")) {
            return new SmsSender();
        } else {
            return null;
        }
    }
}

多个工厂方法模式:

// 与普通工厂模式的区别在于,多个工厂方法模式每一个实例对象的创建对应一个单独的方法
public class SenderFactory {

    public Sender produceMail() {
        return new MailSender();
    }

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

静态工厂方法模式:

// 与多个工厂方法区别,就是每一个方法静态化了,这样就不用创建工厂对象了,方便调用
public class SenderFactory {

    public static Sender produceMail() {
        return new MailSender();
    }

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

抽象工厂模式

普通工厂模式有一个问题就是,类的创建依赖工厂类,也就是说,如果想要拓展程序,必须对工厂类进行修改,这违背了闭包原则,所以,从设计角度考虑,有一定的问题,如何解决?就用到抽象工厂模式,创建多个工厂类,这样一旦需要增加新的功能,直接增加新的工厂类就可以了,不需要修改之前的代码。

// 创建行为接口
public interface Sender {
    void send(String msg);
}

// 短信发送消息的行为
public class SmsSender implements Sender {
    @Override
    public void send(String msg) {
        Log.i("sml", "send: 抽象工厂模式:短信发送消息:" + msg);
    }
}

// 邮件发送消息的行为
public class MailSender implements Sender{
    @Override
    public void send(String msg) {
        Log.i("sml", "send: 抽象工厂模式:邮件发送消息"+msg);
    }
}

// 定义一个工厂接口
public interface Provider {
    Sender produce();
}

// 邮件发送消息工厂
public class MailFactory implements Provider{
    @Override
    public Sender produce() {
        return new MailSender();
    }
}

// 短信发送消息工厂
public class SmsFactory implements Provider{
    @Override
    public Sender produce() {
        return new SmsSender();
    }
}

// 调用
new SmsFactory().produce().send("Sms");

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值