上篇总结了工厂方法模式的使用,可以知道工厂方法模式中,一个工厂对应一种产品,对于实际的开发过程中来说这还不够,所以这篇我们总结工厂模式的升级版,抽象工厂模式。
定义
是一种为访问类提供一个创建一组相关或相互依赖对象的接口,且访问类无须指定所要产品的具体类就能得到同族的不同等级的产品的模式结构。
结构
- 抽象工厂:提供了创建产品的接口,它包含多个创建产品的方法 newProduct(),可以创建多个不同等级的产品。
- 具体工厂:主要是实现抽象工厂中的多个抽象方法,完成具体产品的创建。
- 抽象产品:定义了产品的规范,描述了产品的主要特性和功能,抽象工厂模式有多个抽象产品。
- 具体产品:实现了抽象产品角色所定义的接口,由具体工厂来创建,它 同具体工厂之间是多对一的关系。
示例
光看定义和结构肯定还是有点难以理解,我们还是直接通过代码来学习。
public class MyTest{
public static void main(String[] args) throws CloneNotSupportedException {
Factory factory = new Factory();
factory.newProductA().showing();
factory.newProductB().showing();
}
/**
* 定义多个产品
*/
interface ProductA{
void showing();
}
interface ProductB{
void showing();
}
/**
* 定义具体产品
*/
static class Product1 implements ProductA{
@Override
public void showing() {
System.out.println("具体产品1显示...");
}
}
static class Product2 implements ProductB{
@Override
public void showing() {
System.out.println("具体产品2显示...");
}
}
/**
* 定义抽象工厂接口
*/
interface AbstractFactory{
ProductA newProductA();
ProductB newProductB();
}
/**
* 定义具体工厂
*/
static class Factory implements AbstractFactory{
@Override
public ProductA newProductA() {
System.out.println("具体产品1生成...");
return new Product1();
}
@Override
public ProductB newProductB() {
System.out.println("具体产品2生成...");
return new Product2();
}
}
}
- 第一步:定义了多个抽象产品接口
- 第二步:创建了具体产品,并实现抽象接口
- 第三步:定义了抽象工厂接口
- 第四步:创建了具体工厂,并实现抽象工厂接口
小结:其实抽象工厂模式是工厂方法模式的升级版,一个工厂能够生产出更多的产品,但是同时优缺点也很明显了。
- 优点:不再局限于一个工厂对应一个产品,能够提高代码效率,减少代码量。
- 缺点:每当我们需要新增加一个产品时,所有对应的工厂都需要修改。
抽象工厂模式就总结到这里啦,觉得有帮助记得点个赞~
网友评论