设计模式之简单工厂模式

て烟熏妆下的殇ゞ 提交于 2020-02-06 06:08:00

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(接口)
 不要覆盖基类中已经实现的方法

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!