zoukankan      html  css  js  c++  java
  • Spark开发-Spark中的设计模式_创建型模式大类

    设计模式

    原则: 单一职责 开闭  里氏代换  依赖倒转  接口隔离
    

    创建型模式

    这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。
    这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。	
        原型模式     (Prototype Pattern)
        单例模式     (Singleton Pattern)
        工厂模式     (Factory Pattern)
        抽象工厂模式 (Abstract Factory Pattern)
        建造者模式   (Builder Pattern)
     说明:
        工厂模式: 简单工厂模式(静态方法模式) 工厂方法模式 
    	抽象工厂模式
    

    1.原型模式

     class SparkConf(loadDefaults: Boolean) extends Cloneable with Logging with Serializable 
    

    2.单例模式

      Spark中的 伴生对象就是属于单例模式
    

    3.建造者模式

     SparkSession
     应用或使用:--使用场景 - 在客户端使用链式调用,一步一步的把对象构建出来
     val spark = SparkSession.builder()
      .appName("Common")
      .master("local[0]")
      .getOrCreate()
    

    说明:

     Builder模式的好处之一是可以将对象的创建权交给Builder类,
      可将对象的配置传递和被创建对象隔离开,
      方便使用配置文件来配置创建对象,
    SparkSession通过 SparkSession类,SparkSession静态类和Builder内部类实现了非常方便调用的接口,
      可以灵活根据参数和配置文件来创建SparkSession对象
      场景: 当一个类的构造函数参数超过4个,而且这些参数有些是可选的时,我们通常有两种办法来构建它的对象
      应用: 构建者解决复杂对象的构建问题
      作为对比常用: Javabean 模式
    

    模式源码

       @InterfaceStability.Stable
       class SparkSession private(
           @transient val sparkContext: SparkContext,
           @transient private val existingSharedState: Option[SharedState],
           @transient private val parentSessionState: Option[SessionState],
           @transient private[sql] val extensions: SparkSessionExtensions)
         extends Serializable with Closeable with Logging {
     object SparkSession extends Logging {
      /**
       * Builder for [[SparkSession]].
       */
      @InterfaceStability.Stable
      class Builder extends Logging {
    

    如何实现

         在 SparkSession 中创建一个静态内部类 Builder,然后将 SparkSession 中的参数都复制到Builder类中。
         在 SparkSession中创建一个private的构造函数,参数为Builder类型
    	     
         在Builder中创建一个public的构造函数,参数为Computer中必填的那些参数, 。
         在Builder中创建设置函数,对SparkSession中那些可选参数进行赋值,返回值为Builder类型的实例
         在Builder中创建一个build()方法,在其中构建Computer的实例并返回
    	    def builder(): Builder = new Builder
    

    jdk中的建造者模式 Builder

      java.lang.StringBuilder 和 java.lang.StringBuffer
      StringBuilder和Stringbuffer 可以扩展原对象不同的字符串也可以按不同的顺序拼接
      java.lang.StringBuilder # append()
      java.lang.StringBuffer  # append()
        StringBuilder类 继承自 AbstractStringBuilder,而AbstractStringBuilder实现了 Appendable 接口。
                                AbstractStringBuilder 虽然是一个抽象类,但是它实现了 Appendable接口中的各个append()方法
      java.lang.Appendable 的所有实现类
       public interface Appendable{
    

    4.工厂模式

    Factory Pattern
      RowFactory  
      A factory class
    

    参考:

      Builder模式实战2 (Spark/SparkSession)  https://www.cnblogs.com/arxobject/p/13670470.html
      Spark涉及的设计模式-创建型-原型模式 https://blog.csdn.net/sinat_35045195/article/details/107692251
  • 相关阅读:
    HTML DOM 06 节点关系
    HTML DOM 05 事件(三)
    HTML DOM 05 事件(二)
    HTML DOM 05 事件(一)
    html DOM 04 样式
    html DOM 03 节点的属性
    html DOM 02 获取节点
    html DOM 01 节点概念
    JavaScript 29 计时器
    JavaScript 28 弹出框
  • 原文地址:https://www.cnblogs.com/ytwang/p/14262434.html
Copyright © 2011-2022 走看看