• 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
  • 相关阅读:
    第七章 下
    第七章 上
    第六章 下
    第六章 上
    第五章 下
    linux 系统通过安装包安装mysql 8 步骤(非MariaDB)
    热烈庆祝博客换了新皮肤
    异常处理
    栈计算逆波兰表达式
    栈计算中缀表达式
  • 原文地址:https://www.cnblogs.com/ytwang/p/14262434.html
Copyright © 2020-2023  润新知