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;
        }
      }
    }
    
    // 这时候你已经有形状了,但你觉得不美观,你还需要颜色,那么你这个时候,你又搞了个颜色工厂,如下:
    // 再新加一个颜色工厂
    class Red {
      fill() {
        console.log("fill red")
      }
    }
    
    class Blue {
      fill() {
        console.log("fill blue")
      }
    }
    
    class Green {
      fill() {
        console.log("fill green")
      }
    }
    
    class ColorFactory {
      getColor(color) {
        switch (color) {
          case 'RED':
            return new Red();
          case 'BLUE':
            return new Blue();
          case 'GREEN':
            return new Green();
          default:
            return null;
        }
      }
    }
    
    // 颜色工厂好了,但是你担心,以后工厂多了,不好管理咋办,那还是走之前的套路,把工厂通过抽象工厂生产出来。如下:
    // 最后添加抽象工厂
    class FactoryProducer {
      static getFactory(choice) {
        switch (choice) {
          case 'SHAPE':
            return new ShapeFactory();
          case 'COLOR':
            return new ColorFactory();
          default:
            return null;
        }
      }
    }
    
    // 那么这个时候和上文一样只需要new出一个抽象工厂,就能把所有需要的东西拿到手了:
    //通过抽象工厂拿形状工厂
    const shapeFactory = FactoryProducer.getFactory('SHAPE');
    // 通过工厂拿各种形状
    const shape1 = shapeFactory.getShape('CIRCLE');
    shape1.draw();
    const shape2 = shapeFactory.getShape('RECTANGLE');
    shape2.draw();
    const shape3 = shapeFactory.getShape('SQUARE');
    shape3.draw();
    //通过抽象工厂拿颜色工厂
    const colorFactory = FactoryProducer.getFactory('COLOR');
    // 通过工厂拿各种颜色
    const color1 = colorFactory.getColor('RED');
    color1.fill();
    const color2 = colorFactory.getColor('BLUE');
    color2.fill();
    const color3 = colorFactory.getColor('GREEN');
    color3.fill();
    /**
     * output:
     * I'm a circle
     * I'm a rectangle
     * I'm a square
     * fill red
     * fill blue
     * fill green
     */
  • 相关阅读:
    perl 实现ascall 码转换
    perl 利用管道读取压缩文件内容
    perl 字符串比较操作符
    perl chomp 函数的真正作用
    RSQLite 操作sqlite数据库
    R 中的do.call 函数
    JavaMail发送和接收邮件API(详解)
    POP3_使用SSL链接邮箱并获取邮件
    MySql_delete同时删除多表相关联记录
    mybatis_mybatis写mapper文件注意事项
  • 原文地址:https://www.cnblogs.com/ronle/p/13559177.html
Copyright © 2011-2022 走看看