1. 程式人生 > 實用技巧 >Spark開發-Spark中的設計模式_建立型模式大類

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

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