设计模式之抽象工厂模式
在上一篇博客里面,笔者讲到了工厂模式,相信看到的朋友就会感到奇怪,为什么这篇博客又来讲工厂模式呢?是不是重复了?到底工厂模式和抽象工厂模式有什么区别呢?下面就让我们带着这些问题开始进入今天的主题吧!
首先我们来看看两者的具体定义是怎么说的,工厂模式的定义为:定义一个用于创建对象的接口,让子类决定实例化哪一个类,工厂方法使一个类的实例化延迟到其子类。抽象工厂模式的定义为:为创建一组相关或相互依赖的对象提供一个接口,而且无须指定它们的具体类。通过上面的定义,我们就能很明显发现它们之间的区别。上一篇博客实例里面,我们能够发现创建一个对象的时候,我们会将最终的子类对象传到工厂方法里面,从而能够创建出特定的子类对象。但是在抽象工厂模式里面则不是这样的,它只负责提供一个创建的入口,你想要创建什么对象就调用相应的方法就可以了,不需要传进特定的子类对象。下面笔者将通过一个实例来说明抽象工厂模式的具体使用。
首先我们来定义一个产品接口Product:
public interface Product {
void shareMethod;
void doSomething;
}
然后我们再来定义两个具体的产品ProductA和ProductB,具体代码如下:
public class ProductA implements AbstractProductA {
@Override
public void shareMethod {
// TODO Auto-generated method stub
}
@Override
public void doSomething {
// TODO Auto-generated method stub
}
}
public class ProductA2 implements AbstractProductA {
@Override
public void shareMethod {
// TODO Auto-generated method stub
}
@Override
public void doSomething {
// TODO Auto-generated method stub
}
}
在这里我们省略了B产品的定义代码,方法同产品A是一样的。接下来我们是不是就应该开始定义抽象工厂了,代码如下:
public class Create1 extends AbstractCreator {
@Override
public AbstractProductA createProductA {
return new ProductA;
}
@Override
public AbstractProductB createProductB {
return new ProductB;
}
}
public class Create2 extends AbstractCreator {
@Override
public AbstractProductA createProductA {
return new ProductA2;
}
@Override
public AbstractProductB createProductB {
return new ProductB2;
}
}
最后我们在需要创建产品A、B的地方调用相应的Create方法就可以了。
通过上面的方法,我们能够很明显的发现:随着后面的产品组合的增加,我们将需要定义更多的ProductN和CreateN,因为创建者是随着产品的不同组合、不同数量发生变化的。这样的话,我们就需要同时修改多个地方,严重的违背了开闭原则,所以在使用抽象工厂模式的时候,针对多产品需要的场景慎用。
好了,今天的博客就到这里吧,see you!
相关文章
- Spring Boot中对接Twilio以实现发送验证码和验证短信码
- Spring Boot 3.5:这次更新让你连配置都不用写了,惊不惊喜?
- Spring Boot+Pinot实战:毫秒级实时竞价系统构建
- SpringBoot敏感配置项加密与解密实战
- SpringBoot 注解最全详解,建议收藏!
- Spring Boot 常用注解大全:从入门到进阶
- SpringBoot启动之谜:@SpringBootApplication如何让配置化繁为简
- Springboot集成Kafka原理_spring集成kafka的原理
- Spring Boot中@Data注解的深度解析与实战应用
- 大佬用1000字就把SpringBoot的配置文件讲的明明白白!
