设计模式
原则: 单一职责 开闭 里氏代换 依赖倒转 接口隔离
创建型模式
这些设计模式提供了一种在创建对象的同时隐藏创建逻辑的方式,而不是使用 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