• Java描述设计模式(02):简单工厂模式


    本文源码:GitHub·点这里 || GitEE·点这里

    一、生活场景简介

    1、引入场景

    订餐流程简单描述
    1)、食品抽象类,规定食品的基础属性操作
    2)、鱼类,鸡肉类食品类扩展
    3)、订餐流程类,根据食品名称,加工指定类型食品
    4)、模拟客户端预定操作
    

    2、源代码实现

    1)、关系图谱

    2)、代码实现

    /**
     * 简单工厂模式引入场景
     */
    public class C01_InScene {
        public static void main(String[] args) {
            OrderFood1 orderFood = new OrderFood1() ;
            orderFood.orderFood("fish") ;
            orderFood.orderFood("chicken") ;
        }
    }
    /**
     * 订餐流程
     */
    class OrderFood1 {
        public Food1 orderFood (String foodName){
            Food1 food1 = null ;
            if (foodName.equals("fish")){
                food1 = new FishFood1() ;
                food1.setName("黑鱼");
            } else if (foodName.equals("chicken")){
                food1 = new ChickenFood1() ;
                food1.setName("土鸡");
            }
            if (food1 != null){
                food1.foodMaterial();
                food1.cookFood();
                return food1 ;
            } else {
                return null ;
            }
        }
    }
    /**
     * 食物抽象类
     */
    abstract class Food1 {
        protected String name ;
        public abstract void foodMaterial () ;
        public void cookFood (){
            System.out.println("食品烹饪:" + name);
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
    }
    /**
     * 材料:黑鱼一条
     */
    class FishFood1 extends Food1 {
        @Override
        public void foodMaterial() {
            System.out.println("材料:黑鱼一条");
        }
    }
    /**
     * 材料:土鸡一号
     */
    class ChickenFood1 extends Food1 {
        @Override
        public void foodMaterial() {
            System.out.println("材料:土鸡一号");
        }
    }
    

    3、缺点分析

    1)、OCP原则:软件实体,如类、模块和函数,应当对扩展开放,但对修改关闭。
    2)、违反设计模式的OCP原则,新增食品类不方便扩展,代码改动较大。

    二、简单工厂模式

    1、基本概念

    简单工厂模式是属于创建型模式,又叫做静态工厂方法(Static Factory Method)模式,是由一个工厂对象决定创建出哪个类的对象实例。

    2、代码逻辑

    1)、关系图谱

    2)、代码实现

    /**
     * 简单工厂模式
     */
    public class C02_SimpleFactory {
        public static void main(String[] args) {
            OrderFood2 orderFood2 = new OrderFood2() ;
            orderFood2.orderFood("chicken");
        }
    }
    class OrderFood2 {
        private SimpleFactory simpleFactory = new SimpleFactory() ;
        public void orderFood (String foodName){
            simpleFactory.orderFood(foodName) ;
        }
    }
    /**
     * 简单工厂类:封装食品的生产流程
     */
    class SimpleFactory {
        public Food2 orderFood (String foodName){
            Food2 food2 = null ;
            if (foodName.equals("fish")){
                food2 = new FishFood2() ;
                food2.setName("黑鱼");
            } else if (foodName.equals("chicken")){
                food2 = new ChickenFood2() ;
                food2.setName("土鸡");
            }
            if (food2 != null){
                food2.foodMaterial();
                food2.cookFood();
                return food2 ;
            } else {
                return null ;
            }
        }
    }
    abstract class Food2 {
        protected String name ;
        public abstract void foodMaterial () ;
        public void cookFood (){
            System.out.println("食品烹饪:" + name);
        }
        public String getName() {
            return name;
        }
        public void setName(String name) {
            this.name = name;
        }
    }
    class FishFood2 extends Food2 {
        @Override
        public void foodMaterial() {
            System.out.println("材料:黑鱼一条");
        }
    }
    class ChickenFood2 extends Food2 {
        @Override
        public void foodMaterial() {
            System.out.println("材料:土鸡一号");
        }
    }
    

    3、优缺点分析

    1)、优点总结
     该模式的核心是工厂类。这个类含有必要的逻辑判断,
    可以决定在什么时候创建哪一个登录验证类的实例,
    而调用者则可以免除直接创建对象的责任。简单工厂模式通过这种做法实现了对责任的分割,
    当系统引入新的登录方式的时候无需修改调用者。
    2)、缺点总结
     这个工厂类集中了所有的创建逻辑,当有复杂的多层次等级结构时,
    所有的业务逻辑都在这个工厂类中实现。什么时候它不能工作了,
    整个系统都会受到影响。

    三、源代码地址

    GitHub·地址
    https://github.com/cicadasmile/model-arithmetic-parent
    GitEE·地址
    https://gitee.com/cicadasmile/model-arithmetic-parent
    

  • 相关阅读:
    MongoDB repair on Ubuntu
    java后台图形相关代码,weblogic报错
    weblogic配置达梦数据源
    详解JavaScript中的this
    web app指南之构建html5离线应用
    android中的跨进程通信的实现(一)——远程调用过程和aidl
    android应用开发全程实录出版
    android窗口管理框架解析
    BizTalk调用SAP系统RFC含多个参数以及DateTime类型参数
    plsql连接64位oracle在windows 764下连接设置方法
  • 原文地址:https://www.cnblogs.com/cicada-smile/p/11209669.html
Copyright © 2020-2023  润新知