1.介绍
1)抽象工厂模式:定义一个interface用于创建相关或有依赖关系得对象簇,而无需指明具体得类 2)抽象工厂模式可以将简单工厂模式和工厂方法模式进行整合 3)从设计层面看,抽象工厂模式就是对简单工厂模式的改进(或者称为进一步的抽象) 4)将工厂抽象成两层,AbstractFactory(抽象工厂)和具体实现的工厂子类。可以根据创建对象类型使用对应的工厂子类,这样将单个的简单工厂类变成了工厂簇,更利于代码的维护和扩展
2.实例
实例需求
- 在简单工厂模式的实例下 新增女机器人和男机器人的工厂生产
抽象工厂模式代码
-
AbstractRobotFactory 抽象工厂定义
public interface AbstractRobotFactory { Robot createRobot(String type); } -
GirlRobotFactory 女机器人工厂用于生产女机器人
public class GirlRobotFactory implements AbstractRobotFactory { @Override public Robot createRobot(String type) { Robot robot = null; if (type.equalsIgnoreCase("one")) { robot = new RobotOneGirl("第一代"); } else if (type.equalsIgnoreCase("two")) { robot = new RobotTwoGirl("第二代"); } return robot; } } -
ManRobotFactory 男机器人工厂用于生产男机器人
public class ManRobotFactory implements AbstractRobotFactory { @Override public Robot createRobot(String type) { Robot robot = null; if (type.equalsIgnoreCase("one")) { robot = new RobotOneMan("第一代"); } else if (type.equalsIgnoreCase("two")) { robot = new RobotTwoMan("第二代"); } return robot; } } -
Client
public class Client { public static void main(String[] args) { AbstractRobotFactory robotFactory = null; String input = getInput("输入需要创建girl还是man机器人:"); switch (input) { case "girl": robotFactory = new GirlRobotFactory(); break; case "man": robotFactory = new ManRobotFactory(); break; default: return; } while (true) { String type = getInput("输入机器人类别:"); Robot robot = robotFactory.createRobot(type); if (robot != null) { robot.create(); } else { System.exit(0); } } } public static String getInput(String msg) { try { BufferedReader strin = new BufferedReader(new InputStreamReader(System.in)); System.out.println(msg); String str = strin.readLine(); return str; } catch (IOException e) { e.printStackTrace(); return ""; } } } -
运行结果
输入需要创建girl还是man机器人: man 输入机器人类别: one 男机器人一代生产 第一代头部 第一代身体 第一代手部 第一代脚部 输入机器人类别: two 男机器人二代生产 第二代头部 第二代身体 第二代手部 第二代脚部 输入机器人类别: ex输入需要创建girl还是man机器人: girl 输入机器人类别: one 女机器人一代生产 第一代头部 第一代身体 第一代手部 第一代脚部 输入机器人类别: two 女机器人二代生产 第二代头部 第二代身体 第二代手部 第二代脚部 输入机器人类别: ex