模式 / 创建型模式
image

//Prototype
interface Shape {
    fun clone(): Shape
}

//ConcretePrototype
class Square(var lineCount: Int = 4): Shape {
    override fun clone(): Shape {
        return Square(lineCount)
    }
}

//Client
class ShapeMaker(private var shape: Shape) {
    fun makeShape(): Shape {
        return shape.clone()
    }
}

val square = Square()
val maker = ShapeMaker(square)

val square1 = maker.makeShape()
val square2 = maker.makeShape() as Square

println(square1)
println(square2.lineCount)