zoukankan      html  css  js  c++  java
  • 设计模式

    /**
     * 比如我们现在有很多形状比如圆形,矩形和正方形。
     * 这类都是属于形状,那我们是不是可以通过专门生产形状的工厂来生成它们的实例么?
     * */
    class Circle {
      draw() {
        console.log("I'm a circle")
      }
    }
    
    class Rectangle {
      draw() {
        console.log("I'm a rectangle")
      }
    }
    
    class Square {
      draw() {
        console.log("I'm a square")
      }
    }
    
    /**
     * 那么接下来,我们可以建立一个专门生产形状的工厂来生产它们了。
     * 即根据字符串来产生对应需要的类。你在这里可以看到类的出口都已经在一个方法中了。
     * */
    class ShapeFactory {
      getShape(shapeType) {
        switch (shapeType) {
          case 'CIRCLE':
            return new Circle();
          case 'RECTANGLE':
            return new Rectangle();
          case 'SQUARE':
            return new Square();
          default:
            return null;
        }
      }
    }
    
    /**
     * 那么我们需要使用的时候,就可以直接只需要new出一个工厂,
     * 在根据字符串就能拿到对应的需要生产的类了。而不需要分别对类进行new。
     * */
    const shapeFactory = new ShapeFactory();
    // 通过工厂拿各种形状
    const shape1 = shapeFactory.getShape('CIRCLE');
    shape1.draw();
    const shape2 = shapeFactory.getShape('RECTANGLE');
    shape2.draw();
    const shape3 = shapeFactory.getShape('SQUARE');
    shape3.draw();
    /**
     * output:
     * I'm a circle
     * I'm a rectangle
     * I'm a square
     */
    
    /**
     * 优势:
     * 那么使用工厂模式的好处也是显而易见的,比如实例的生产比较复杂,
     * 或者说生成实例后还需要额外加工,这个时候工厂给了我们一个统一的出入口,
     * 也方便了日后对这个实例的修改。比如你要修改工厂产出是一个单例的时候,
     * 就不需要在所有的类中修改,而只要在工厂出口修改即可达到目标。
     * */
  • 相关阅读:
    hdu2066最短路径spfa算法对每个点分别判断0ms过
    关于oj上c++与g++的区别以及一些常见的问题
    hdu1213依旧并查集。求集合的个数
    hdu2112最短路径
    hdu1232最水并查集模版题
    hdu1325最大联通分量+树中点与边数值关系
    hdu2544最短路径spfa模版题
    hdu1856依旧并查集
    hdu1879最小生成树+并查集
    sencha touch 视图(view) show与hide事件探讨
  • 原文地址:https://www.cnblogs.com/ronle/p/13559144.html
Copyright © 2011-2022 走看看