【设计模式】抽象工厂模式

简介

抽象工厂模式是对工厂方法模式的扩展。工厂方法模式里,每个工厂只能创建一个对应的商品。抽象工厂模式里,工厂的接口里是一系列创造抽象产品的方法,而不再是一个,抽象产品也不再是一个了,而是一系列相关的产品。

例子

假设有两个生产产商 Factory1(联想) 和 Factory2(华硕),这两个厂商都会生产商品 ProductA(电脑) 和 Product B(鼠标)。但两个产商生产的电脑和鼠标又是不同的,分别记为 ProductA1(联想电脑),ProductB1(联想鼠标),ProductA2(华硕电脑),ProductB2(华硕鼠标)。

商品类

对于每个商品来讲,都有一个抽象接口,定义了商品的方法。

电脑接口 IProductA

public interface IProductA {
    public void method();
}

鼠标接口 IProductB

public interface IProductB {
    public void method();
}

联想电脑类 ProductA1

public class ProductA1 implements IProductA {
    @Override
    public void method() {
        System.out.println("Method for Product [A1] 联想电脑");
    }
}

华硕电脑类 ProductA2

public class ProductA2 implements IProductA {
    @Override
    public void method() {
        System.out.println("Method for Product [A2] 华硕电脑");
    }
}

联想鼠标类 ProductB1

public class ProductB1 implements IProductB {
    @Override
    public void method() {
        System.out.println("Method for Product [B1] 联想鼠标");
    }
}

华硕鼠标类 ProductB2

public class ProductB2 implements IProductB {
    @Override
    public void method() {
        System.out.println("Method for Product [B2] 华硕鼠标");
    }
}

工厂类

对于产商来讲,也有一个接口,定义了生产电脑和鼠标的接口方法。

接口 IFactory

public interface IFactory {
    public IProductA createProductA();
    public IProductB createProductB();
}

联想公司 Factory1

public class Factory1 implements IFactory {
    @Override
    public IProductA createProductA() {
        return new ProductA1();
    }
    @Override
    public IProductB createProductB() {
        return new ProductB1();
    }
}

华硕公司 Factory2

public class Factory2 implements IFactory {
    @Override
    public IProductA createProductA() {
        return new ProductA2();
    }

    @Override
    public IProductB createProductB() {
        return new ProductB2();
    }
}

测试类 Test

public class Test {
    public static void main(String[] args) {
        IFactory factory1 = new Factory1();
        IFactory factory2 = new Factory2();

        IProductA productA1 = factory1.createProductA();
        productA1.method();
        IProductB productB1 = factory1.createProductB();
        productB1.method();

        IProductA productA2 = factory2.createProductA();
        productA2.method();
        IProductB productB2 = factory2.createProductB();
        productB2.method();
    }
}

执行结果
执行结果

类图

类图

总结

由于抽象工厂定义后,抽象产品的个数就已经固定,所以最好在抽象产品的个数不太会变化的情况下使用抽象工厂模式。

简单工厂模式——工厂方法模式——抽象工厂模式,总结如下:

  1. 工厂方法模式弥补了简单工厂模式对修改开放的弊端,工厂方法模式模式遵循了开闭原则
  2. 从工厂方法模式进化到抽象工厂模式,是因为抽象工厂弥补了工厂方法只能创造一个系列的产品的弊端。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值