原则:
这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 new 运算符直接实例化对象。
这使得程序在判断针对某个给定实例需要创建哪些对象时更加灵活。
原型模式 (Prototype Pattern)
单例模式 (Singleton Pattern)
工厂模式 (Factory Pattern)
抽象工厂模式 (Abstract Factory Pattern)
建造者模式 (Builder Pattern)
说明:
工厂模式: 简单工厂模式(静态方法模式) 工厂方法模式
抽象工厂模式
class SparkConf(loadDefaults: Boolean) extends Cloneable with Logging with Serializable
Spark中的 伴生对象就是属于单例模式
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
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
原文:https://www.cnblogs.com/ytwang/p/14262434.html