1.介绍
1)简单工厂模式是属于创建型模式,是工厂模式的一种。简单工厂模式是由一个工厂对象决定创建出哪一种产品类的实例。简单工厂模式是工厂模式家族中最简单实用的模式
2)简单工厂模式:定义了一个创建对象的类,由这个类来封装实例化对象的行为(代码)
3)在软件开发中,当我们会用到大量的创建某种、某类或某批对象时,就会使用到工厂模式
2.实例
实例需求
- 机器人生产的项目:要便于机器人种类的扩展,要便于维护
- 机器人的种类分为:机器人一代,机器人二代等
- 完成机器人的生产需求
简单工厂模式代码
-
Robot
抽象类,所有机器人生产的步骤public abstract class Robot { private String name; public Robot(String name) { this.name = name; } /** * 准备材料 */ public abstract void ready(); public void create() { ready(); head(); body(); hand(); foot(); } protected void head() { System.out.println(name + "头部"); } protected void body() { System.out.println(name + "身体"); } protected void hand() { System.out.println(name + "手部"); } protected void foot() { System.out.println(name + "脚部"); } }
-
RobotOne
第一代机器人生产public class RobotOne extends Robot { public RobotOne(String name) { super(name); } @Override public void ready() { System.out.println("机器人一代生产"); } }
-
RobotTwo
第二代机器人生产public class RobotTwo extends Robot { public RobotTwo(String name) { super(name); } @Override public void ready() { System.out.println("机器人二代生产"); } }
-
RobotFactory
机器人生产工厂public class RobotFactory { public RobotFactory() { } public Robot createRobot(String type) { Robot robot = null; if (type.equalsIgnoreCase("one")) { robot = new RobotOne("第一代"); } else if (type.equalsIgnoreCase("two")) { robot = new RobotTwo("第二代"); } return robot; } }
-
Client
客户端根据不同的类型生产出不同的机器人public class Client { public static void main(String[] args) { RobotFactory robotFactory = new RobotFactory(); while (true) { String type = getType(); Robot robot = robotFactory.createRobot(type); if (robot != null) { robot.create(); } else { System.exit(0); } } } public static String getType() { try { BufferedReader strin = new BufferedReader(new InputStreamReader(System.in)); System.out.println("input type:"); String str = strin.readLine(); return str; } catch (IOException e) { e.printStackTrace(); return ""; } } }
-
执行结果
input type: one 机器人一代生产 第一代头部 第一代身体 第一代手部 第一代脚部 input type: two 机器人二代生产 第二代头部 第二代身体 第二代手部 第二代脚部 input type: three
3.小结
1)工厂模式的意义:将实例化对象的代码提取出来,放到一个类中统一管理和维护,达到和主项目的依赖关系的解耦,从而提高项目的扩展和维护性
2)三种工厂模式
简单工厂模式(静态工厂模式)
工厂方法模式
抽象工厂模式
3)设计模式的依赖抽象原则
创建对象实例时,不要直接new类,而是把这个new类的动作放在一个工厂的方法中并返回
不要让类继承具体类,而是继承抽象类或者实现interface(接口)
不要覆盖基类中已经实现的方法