利用类构造函数默认参数,创建一个类。
之所以用Builder Pattern是因为要根据不同属性来创建不同的对象。
正如如下步骤:1.name 2.选择一个产品 3.客户定制一个产品
client:
// Step 1 - Ask for name
@H_404_10@let name ="Joe";
// Step 2 - Select a Product
@H_404_10@let builder =BurgerBuilder.getBuilder(Burgers.BIGBURGER);
// Step 3 - Customize burger?
builder.setMayo(false);
builder.setCooked(Burger.Cooked.WELLDONE);
order.printDescription();
/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
pattern:
private init() {
// do nothing
@H_404_10@ }@H_404_10@ func setVeggie(choice: Bool) { @H_404_10@ self.veggie = choice; @H_404_10@ if (choice) { @H_404_10@ self.bacon =false; @H_404_10@ } @H_404_10@ }
@H_404_10@ func setPickles(choice: Bool) { self.pickles = choice; } @H_404_10@ func setMayo(choice: Bool) { self.mayo = choice; } @H_404_10@ func setKetchup(choice: Bool) { self.ketchup = choice; } @H_404_10@ func setLettuce(choice: Bool) { self.lettuce = choice; } @H_404_10@ func setCooked(choice: Burger.Cooked) { self.cooked = choice; } @H_404_10@ func addPatty(choice: Bool) { self.patties = choice ?3 : 2; } @H_404_10@ func setBacon(choice: Bool) { self.bacon = choice; }
@H_404_10@ func buildObject(name: String) -> Burger { @H_404_10@ return Burger(name: name,veggie:veggie,patties: patties, @H_404_10@ pickles:pickles,mayo: mayo,ketchup:ketchup, @H_404_10@ lettuce:lettuce,cook: cooked,bacon:bacon); @H_404_10@ }
@H_404_10@ class func getBuilder(burgerType:Burgers) ->BurgerBuilder { @H_404_10@ var builder:BurgerBuilder; @H_404_10@ switch (burgerType) { @H_404_10@ case .BIGBURGER: builder = BigBurgerBuilder(); @H_404_10@ case .SUPERVEGGIE: builder = SuperVeggieBurgerBuilder(); @H_404_10@ case .STANDARD: builder = BurgerBuilder(); @H_404_10@ } @H_404_10@ return builder; @H_404_10@ } @H_404_10@}
private override init() {
@H_404_10@ super.init(); @H_404_10@ self.patties =4; @H_404_10@ self.bacon =false; @H_404_10@ }@H_404_10@ override func addPatty(choice:Bool) {
fatalError("Cannot add patty to Big Burger");
@H_404_10@ } @H_404_10@}
private override init() {
@H_404_10@ super.init(); @H_404_10@ self.veggie =true; @H_404_10@ self.bacon =false; @H_404_10@ }@H_404_10@ override func setVeggie(choice:Bool) {
// do nothing - always veggie
@H_404_10@ }@H_404_10@ override func setBacon(choice:Bool) {
fatalError("Cannot add bacon to this burger");
@H_404_10@ } @H_404_10@}