码迷,mamicode.com
首页 > 其他好文 > 详细

设计模式-工厂模式-记运行ShapeFactoryDemo排错

时间:2020-06-04 10:42:30      阅读:73      评论:0      收藏:0      [点我收藏+]

标签:sig   条件   图片   比较   com   circle   idea   title   接口   

记一次运行工厂类实例 ShapeFactoryDemo 排错

问题描述

对设计模式的工厂模式进行实例运行,发现声明接口类型的引用对象获取到 getShape() 方法返回的值是 null 而不是预想的 Shape 接口的实现类的实例对象

工厂模式--UML图

技术图片技术图片

开发工具

IntellJ IDEA

  • 控制台输出

     Exception in thread "main" java.lang.NullPointerException
      at factorypattern.FactoryPatternDemo.main(FactoryPatternDemo.java:11)
    
    

    报错的内容是“空指针”

我也是懵逼的

  • 定位到 FactoryPatternDemo.java 行 11 处以及之前的代码

        ShapeFactory shapeFactory = new ShapeFactory();
        System.out.println(shapeFactory.getShape("CIRCLE"));
        // 获取 Circle 的对象,并调用它的 draw 方法
        Shape shape1 = shapeFactory.getShape("CIRCLE");
        // 调用 Circle 的draw 方法
        shape1.draw();
    

这语句执行出 空指针错误,是shape1 指向了空对象

我们向上回溯shape1 指针应该是指向通过 shapeFactory 的 getshape()方法创建的对象,shapeFactory的getshape方法定义如下

 public Shape getShape(String shapeType){
     if (shapeType == null){
         return null;
     }

     if (shapeType.equalsIgnoreCase("CIRECLE")){
         return new Circle();
     }else if(shapeType.equalsIgnoreCase("RECTANGLE")){
         return new Rectangle();
     }else if(shapeType.equalsIgnoreCase("SQUARE")){
         return new Square();
     }
     return null;
 }

即给shape方法传入字符串参数对应创建已有可匹配的三个图形类,否则就传回null值

分析

那么可以说明main方法里传入的参数值在shape方法里没有匹配上值,于是传回了空值导致 shape 类型的对象变成了空指针。

而以上代码可以看出main方法里并无任何拼写或者语法上的错误,最后当我看向getshape()方法体里if循环的判定条件,是比较的字符串样本--“CIRCLE”错误最终改回来后运行时控制台输出显示:

 factorypattern.Circle@4554617c
 Inside Circle::draw() method.
 Inside Rectangle::draw() method.
 Inside Square::draw() method.

运行成功,三个方法执行并输出

以上

设计模式-工厂模式-记运行ShapeFactoryDemo排错

标签:sig   条件   图片   比较   com   circle   idea   title   接口   

原文地址:https://www.cnblogs.com/RickyZhu/p/13041852.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!