之所以用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");
}
}
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。