
利用类构造函数默认参数,创建一个类。
之所以用Builder Pattern是因为要根据不同属性来创建不同的对象。
正如如下步骤:1.name 2.选择一个产品 3.客户定制一个产品
clIEnt:
// Step 1 - Ask for name
let name ="Joe";
// Step 2 - Select a Product
let builder =BurgerBuilder.getBuilder(Burgers.BIGBURGER);
// Step 3 - Customize burger?
builder.setMayo(false);
builder.setCooked(Burger.Cooked.WELLDONE);
let order =builder.buildobject(name);
order.printDescription();
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
pattern:
enum Burgers {
case STANDARD; case BIGBURGER;case SUPERVEGGIE;
}
class BurgerBuilder {
private var veggIE =false;
private var pickles =false;
private var mayo =true;
private var ketchup =true;
private var lettuce =true;
private var cooked =Burger.Cooked.norMAL;
private var pattIEs =2;
private var bacon =true;
private init() {
// do nothing
}
func setVeggIE(choice: Bool) {
self.veggIE = choice;
if (choice) {
self.bacon =false;
}
}
func setPickles(choice: Bool) { self.pickles = choice; }
func setMayo(choice: Bool) { self.mayo = choice; }
func setKetchup(choice: Bool) { self.ketchup = choice; }
func setLettuce(choice: Bool) { self.lettuce = choice; }
func setCooked(choice: Burger.Cooked) { self.cooked = choice; }
func addPatty(choice: Bool) { self.pattIEs = choice ?3 : 2; }
func setBacon(choice: Bool) { self.bacon = choice; }
func buildobject(name: String) -> Burger {
return Burger(name: name,veggIE:veggIE,pattIEs: pattIEs,
pickles:pickles,mayo: mayo,ketchup:ketchup,
lettuce:lettuce,cook: cooked,bacon:bacon);
}
class func getBuilder(burgerType:Burgers) ->BurgerBuilder {
var builder:BurgerBuilder;
switch (burgerType) {
case .BIGBURGER: builder = BigBurgerBuilder();
case .SUPERVEGGIE: builder = SuperVeggIEBurgerBuilder();
case .STANDARD: builder = BurgerBuilder();
}
return builder;
}
}
class BigBurgerBuilder :BurgerBuilder {
private overrIDe init() {
super.init();
self.pattIEs =4;
self.bacon =false;
}
overrIDe func addPatty(choice:Bool) {
fatalError("Cannot add patty to Big Burger");
}
}
class SuperVeggIEBurgerBuilder :BurgerBuilder {
private overrIDe init() {
super.init();
self.veggIE =true;
self.bacon =false;
}
overrIDe func setVeggIE(choice:Bool) {
// do nothing - always veggIE
}
overrIDe func setBacon(choice:Bool) {
fatalError("Cannot add bacon to this burger");
}
}
总结以上是内存溢出为你收集整理的swift - The Builder Pattern全部内容,希望文章能够帮你解决swift - The Builder Pattern所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)