一、简介
1. 定义
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类
2.特点
- 抽象工厂的方法输出的对象都是相关或相互依赖的
- 一般实现称为接口
- 通常结合工厂方法提供具体的实现
- 抽象工厂:创建一系列相关或相互依赖对象的接口
- 具体工厂:提供抽象工厂接口具体实现
- 产品:抽象工厂的产出
- 客户端:使用抽象工厂的对象
4.何时使用?
- 只关心使用,而不关心实现时(面向接口)
- 可能需要动态的切换产品簇的时候
- 强调一系列相关产品,以便联合使用它们时
二、实例
首先定义一个CPU和主板的接口
/** * CPU接口 */ public interface CpuApi { void caculate(); }
/** * 主板接口 */ public interface MainBoardApi { void installCpu(); }
再定一个两个实现类
public class IntelCpu implements CpuApi { /** * 针脚 */ private int pins; public IntelCpu(int pins) { this.pins = pins; } @Override public void caculate() { System.out.println("caculate us Intel,pins:"+pins); } }
public class MsiMainBoard implements MainBoardApi { /** * CPU插槽孔数 */ private int cpuHoles; public MsiMainBoard(int cpuHoles) { this.cpuHoles = cpuHoles; } @Override public void installCpu() { System.out.println("Main board of MSI install CPU,CPU holes:" + cpuHoles); } }
定义一个抽象工厂
public interface AbstractFactory { CpuApi createCpu(); MainBoardApi createMainBoard(); }
具体的实现的Lenovo工厂
public class LenovoFactory implements AbstractFactory { @Override public CpuApi createCpu() { return new IntelCpu(1156); } @Override public MainBoardApi createMainBoard() { return new MsiMainBoard(1156); } }
最后使用
public class AbstractFactoryTest { public static void main(String[] args) { AbstractFactory factory = new LenovoFactory(); CpuApi cpu = factory.createCpu(); MainBoardApi mainBoard = factory.createMainBoard(); // cpu.caculate(); mainBoard.installCpu(); } }