标签:contain redo point 数据 简单 haskell detail 之间 color
对象创建模式
设计模式是为了解决一类问题而出现的,要深刻理解某个模式的应用场景,优点,缺点。千万不要为了使用而实用,那样很可能写出不伦不类的东西。
原型可以理解为模版,在创建新的对象的时候,按照模板的方式来复制。这样避免了重新创造轮子。
简单理解就是:创建第一个模板对象,然后通过复制模板来创建新的对象,还记得UITableviewCell的Deque方法吗?这其实就是一个“原型”,
例子是要存储复杂的嵌套数据结构
假设我有一个绘图类LeoDrawer,那么这个Drawer必然要保存每一步后操作的结果,这样我能够进行redo和undo(可以用NSUndoManager,这里只是举例)。类似这种快照就是原型模式的典型场景
定义原型
protocol Shape{
var location:CGPoint{get set}
func draw()
func clone()->Shape
}
具体的类
class RoundShape: Shape {
var location:CGPoint
init(location:CGPoint){
self.location = location
}
func draw() {
}
func clone() -> Shape {
let shape = RoundShape(location: self.location)
return shape
}
}
class RectShape:Shape {
var location:CGPoint
init(location:CGPoint){
self.location = location
}
func draw() {
}
func clone() -> Shape {
let shape = RectShape(location: self.location)
return shape
}
}
客户端
class LeoDrawer{
var shapes:[Shape]?
}
let drawer = LeoDrawer()
drawer.shapes = [RoundShape(location: CGPointMake(1, 1)),RectShape(location: CGPointMake(10, 10))]
let shapesSnapshot = drawer.shapes?.map({ (shape) -> Shape in
return shape.clone()
})
优点
在扩展的时候,子类遵循原型的协议,很容易的扩展。并且,客户端代码不需要任何修改
标签:contain redo point 数据 简单 haskell detail 之间 color
原文地址:http://www.cnblogs.com/chims-liu-touch/p/6045229.html