抽象工厂模式

发布 : 2018-11-25 分类 : 设计模式 浏览 :

简介

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

结构

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

    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
原文链接 : https://liuzhihang.com/2018/11/25/abstract-factory-pattern.html
版权声明 : 本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明出处!

博客已萌萌哒运行(●'◡'●)ノ♥
Theme - BMW | Made With 💗 | Powered by GodBMW