抽象工厂模式

工厂的工厂, 在工厂的基础上进行抽象, 用来获取工厂, 然后通过工厂获取一类产品
和工厂方法的主要区别是: 工厂方法每次获取的是单个产品的工厂, 而抽象工厂则是一类产品

结构

  • 抽象工厂
  • 具体工厂
  • 抽象产品
  • 具体产品
    抽象工厂

    Demo

抽象工厂
public interface ComputerFactory {

    Display getDisplay();

    AbCpu getCpuInfo();
}
具体工厂
public class BookComputerFactory implements ComputerFactory {
    @Override
    public Display getDisplay() {
        return new DellDisplay();
    }
    @Override
    public AbCpu getCpuInfo() {
        return new AmdCpu();
    }
}
public class DesktopComputerFactory implements ComputerFactory {
    @Override
    public Display getDisplay() {
        return new SamsungDisplay();
    }
    @Override
    public AbCpu getCpuInfo() {
        return new IntelCpu();
    }
}
抽象产品
public  abstract class AbCpu {
    abstract String getName();
    abstract String getType();
}
public abstract class Display {
    abstract String getName();
    abstract String getSize();
}
具体产品

AbCpu 的具体产品

public class AmdCpu extends AbCpu {
    @Override
    String getName() {
        return "AMD";
    }
    @Override
    String getType() {
        return "8核";
    }
}
public class IntelCpu extends AbCpu {
    @Override
    String getName() {
        return "i5";
    }
    @Override
    String getType() {
        return "八核";
    }
}

Display的具体产品

public class SamsungDisplay extends Display {
    @Override
    String getName() {
        return "三星";
    }
    @Override
    String getSize() {
        return "13cun";
    }
}
public class DellDisplay extends Display {
    @Override
    String getName() {
        return "Dell";
    }
    @Override
    String getSize() {
        return "20寸";
    }
}

其他

  • 抽象工厂比较适合用于同一产品族的产品, 进行抽象
  • 增加新的产品族要增加的内容较多, 可以使用反射减少代码量

   版权声明

文章作者: liuzhihang
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源!