zoukankan      html  css  js  c++  java
  • 工厂模式

    应用实例: 1、您需要文具(圆,长方形,正方形),可以直接从文具包里拿,而不用去管这文具是怎么做出来的,以及这个文具的具体材料。

    使用场景:当一些类创建时过于复杂,但又被经常调用时。

    步骤 1

    创建一个接口:

    /**
     * 形状
     */
    public interface Shape {
       
       void draw();
    }

    步骤 2

    创建实现接口的实体类。

    /**
     * 长方形类
     */
    public class Rectangle implements Shape {
     
       @Override
       public void draw() {
          System.out.println("长方形");
       }
    }
    
    /**
     * 正方形
     */
    public class Square implements Shape {
     
       @Override
       public void draw() {
          System.out.println("正方形");
       }
    }
    
    
    /**
     * 圆
     */
    public class Circle implements Shape {
     
       @Override
       public void draw() {
          System.out.println("圆");
       }
    }

    步骤 3

    创建一个工厂,生成基于给定信息的实体类的对象。

    /**
     * 获取形状的工厂
     */
    public class ShapeFactory {
    
       /**
        *
        * 使用 getShape 方法获取形状类型的对象
        * @param shapeType
        * @return 返回的值是他们的父类。(向上造型)
        */
        public Shape getShape(String shapeType) {
    
            //如果参数是null,返回null
            if (shapeType == null) {
                return null;
            }
    
            //如果参数是CIRCLE,就返回Circle实例(忽略大小写)
            if (shapeType.equalsIgnoreCase("CIRCLE")) {
                return new Circle();
            }
    
            //如果参数是RECTANGLE,就返回Rectangle实例(忽略大小写)
            if (shapeType.equalsIgnoreCase("RECTANGLE")) {
                return new Rectangle();
            }
    
            //如果参数是SQUARE,就返回Square实例(忽略大小写)
            if (shapeType.equalsIgnoreCase("SQUARE")) {
                return new Square();
            }
    
            //都不满足返回null
            return null;
        }
    }

    测试

    public class FactoryPatternDemo {
     
       public static void main(String[] args) {
    
          //创建工厂
          ShapeFactory shapeFactory = new ShapeFactory();
     
          //获取 Circle 的对象,并调用它的 draw 方法
          Shape shape1 = shapeFactory.getShape("CIRCLE");
          shape1.draw();
     
          //获取 Rectangle 的对象,并调用它的 draw 方法
          Shape shape2 = shapeFactory.getShape("RECTANGLE");
          shape2.draw();
     
          //获取 Square 的对象,并调用它的 draw 方法
          Shape shape3 = shapeFactory.getShape("SQUARE");
          shape3.draw();
    
       }
    }



  • 相关阅读:
    常用的排序方法
    mongoose 操作
    formidable使用
    cors跨域(支持cookie跨域) node后台 express
    mongoose Schema写法
    vue生命周期钩子 (mounted 加载数据没有缓存用 activated 配合keep-alive组件)
    vue路由跳转 页面回到顶部
    RESTful风格的路由设计
    router-link 绑定事件不生效
    axios的Content-Type类型导致后台无法解析数据
  • 原文地址:https://www.cnblogs.com/bigbigxiao/p/13132110.html
Copyright © 2011-2022 走看看