本文主要是介绍iOS 建造者模式,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
//【原】iOS设计模式之:建造者模式Builder Pattern,用于改进初始化参数
//原文地址http://www.cnblogs.com/wengzilin/p/4365855.html
///iOS 建造者模式
//感觉建造者模式与工厂方法模式非常类似,但是加入了指挥者类。
//工厂模式一般都是创建一个产品,注重的是把这个产品创建出来就行,只要创建出来,不关心这个产品的组成部分。从代码上看,工厂模式就是一个方法,用这个方法就能生产出产品。
// 工厂模式把一个类的实例化延迟到它的子类中,核心的工厂类不负责所有产品的创建,而是将具体创建的工作交给子类去做。让子类决定实例化哪一个类。即抽象工厂角色
//建造者模式也是创建一个产品,但是不仅要把这个产品创建出来,还要关系这个产品的组成细节,组成过程。从代码上看,建造者模式在建造产品时,这个产品有很多方法,建造者模式会根据这些相同方法但是不同执行顺序建造出不同组成细节的产品。
//建造者模式将一个产品的内部表象和产品的生成过程分开来,从而可以使一个建造过程生成具有不同的内部表象的产品对象。
//需要构造的对象非常复杂,而调用者不需要知道这些细节
//建造模式的关键是导演角色,这个角色掌握了零件对象的状态和产品的整体组装蓝图。没有了这个角色,建造模式就不是建造模式。当然,导演角色可以同时持有几种蓝图,按照需要给出完全不同的组装结果。
//房子产品
class ZJLRoom:NSObject {
var price:String!
var roomColor:String!
var size:String!
var style:String!
///创建房子的方法
classfunc creatBuilder(callback:((ZJLRoomBuilder)->Void)?) ->ZJLRoom {
let builder =ZJLRoomBuilder()
callback?(builder)
return builder.build()
}
overrideinit() {
}
func lookRoom() {
print(price)
print(roomColor)
print(size)
print(style)
}
}
//房子建造者 导演角色负责房子产品的组成以及各个
class ZJLRoomBuilder:NSObject {
var price:String =""
var roomColor:String =""
var size:String =""
var style:String =""
func build() ->ZJLRoom {
let room =ZJLRoom()
room.price =price
room.roomColor =roomColor
room.size =size
room.style =style
return room
}
}
//现在这个车有两种初始化方法 一种是:
/*
var room = ZJLRoom()
room.price = "100000"
room.roomColor = "白色"
room.size = "100m²"
room.style = "装修"
一种是:是在init方法里面实现
*/
//实际上,以上两种方式分别代表了两种iOS对象的初始化方式。在未使用建造者之前,这两种初始化对象方式都有不方便的地方。第一种方法灵活,但是如果你接触iOS时间长点就会发现,经常会记不住这个类到底有哪些属性需要初始化,尤其是当这个类是被人提供给你的时候!我们多么希望类的提供者能搞点注释啊啥的告知我们一下。第二种方法则很清晰地告诉调用者到底有哪些属性需要在创建对象时初始化。但是,当类的提供者有天跟你说:hey,哥们,现在业务逻辑改变了,我增加了一个xxx属性,init方法也变了。这时,你是不是很想打他?每新增一个新的属性,init方法就要变动,而且当需要初始化的属性多大十几二十个时,这个init方法要不要太壮观!
//所以,当某个类的属性值很多时,我们可以考虑使用建造者模式建造者来让初始化过程清晰一些,类的使用者会很感恩你这么做的。用iOS描述大概是这样的:
var room2 = ZJLRoom.creatBuilder { (builder)in
builder.price ="883333"
builder.roomColor ="紫色"
builder.size ="2000m²"
builder.style ="欧式9"
}
room2.lookRoom()
这篇关于iOS 建造者模式的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!