工厂模式分为 工厂方法模式 和 抽象工厂模式 :
工厂方法模式
分为:
- 普通工厂模式
就是建立一个工厂类,对于实现了同一接口的一些类进行实例的创建多个工厂方法模式
- 多个工厂方法模式
是对普通工厂方法模式的改进,在普通工厂方法模式中,如果传递的字符串出错,则不能正确创建对象,而多个工厂方法模式,是提供多个工厂方法,分别创建对象
- 静态工厂方法模式
将上面的多个工厂方法模式里的方法置为静态的,不需要创建实例,直接调用即可
普通工厂模式:
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");
本文深入解析工厂模式,包括工厂方法模式和抽象工厂模式的实现与应用。通过实例展示普通工厂模式、多个工厂方法模式及静态工厂方法模式的区别,以及抽象工厂模式如何解决普通工厂模式的问题。

920

被折叠的 条评论
为什么被折叠?



