swift - The Builder Pattern

前端之家收集整理的这篇文章主要介绍了swift - The Builder Pattern前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

利用类构造函数默认参数,创建一个类。

之所以用Builder Pattern是因为要根据不同属性来创建不同的对象。

正如如下步骤:1.name 2.选择一个产品 3.客户定制一个产品

client:

// Step 1 - Ask for name

let@H_404_12@ name ="Joe"@H_404_12@;


// Step 2 - Select a Product

let@H_404_12@ builder =BurgerBuilder@H_404_12@.getBuilder@H_404_12@(Burgers@H_404_12@.BIGBURGER@H_404_12@);


// Step 3 - Customize burger?

builder.@H_404_12@setMayo@H_404_12@(@H_404_12@false@H_404_12@);@H_404_12@

builder.@H_404_12@setCooked@H_404_12@(@H_404_12@Burger@H_404_12@.@H_404_12@Cooked.@H_404_12@WELLDONE@H_404_12@);@H_404_12@


let@H_404_12@ order =builder@H_404_12@.buildObject@H_404_12@(name@H_404_12@);


order@H_404_12@.@H_404_12@printDescription();@H_404_12@


@H_404_12@

/////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

pattern:


enum@H_404_12@ Burgers {

case@H_404_12@ STANDARD; case@H_404_12@ BIGBURGER;case@H_404_12@ SUPERVEGGIE;

}


class@H_404_12@ BurgerBuilder {

private@H_404_12@ var@H_404_12@ veggie =false@H_404_12@;

private@H_404_12@ var@H_404_12@ pickles =false@H_404_12@;

private@H_404_12@ var@H_404_12@ mayo =true@H_404_12@;

private@H_404_12@ var@H_404_12@ ketchup =true@H_404_12@;

private@H_404_12@ var@H_404_12@ lettuce =true@H_404_12@;

private@H_404_12@ var@H_404_12@ cooked =Burger@H_404_12@.Cooked@H_404_12@.NORMAL@H_404_12@;

private@H_404_12@ var@H_404_12@ patties =2@H_404_12@;

private@H_404_12@ var@H_404_12@ bacon =true@H_404_12@;

@H_404_12@private @H_404_12@ init() {@H_404_12@

@H_404_12@// do nothing

}

func@H_404_12@ setVeggie(choice: Bool@H_404_12@) {

self@H_404_12@.veggie@H_404_12@ = choice;

if@H_404_12@ (choice) {

self@H_404_12@.bacon@H_404_12@ =false@H_404_12@;

}

}

func@H_404_12@ setPickles(choice: Bool@H_404_12@) { self@H_404_12@.pickles@H_404_12@ = choice; }

func@H_404_12@ setMayo(choice: Bool@H_404_12@) { self@H_404_12@.mayo@H_404_12@ = choice; }

func@H_404_12@ setKetchup(choice: Bool@H_404_12@) { self@H_404_12@.ketchup@H_404_12@ = choice; }

func@H_404_12@ setLettuce(choice: Bool@H_404_12@) { self@H_404_12@.lettuce@H_404_12@ = choice; }

func@H_404_12@ setCooked(choice: Burger@H_404_12@.Cooked@H_404_12@) { self@H_404_12@.cooked@H_404_12@ = choice; }

func@H_404_12@ addPatty(choice: Bool@H_404_12@) { self@H_404_12@.patties@H_404_12@ = choice ?3@H_404_12@ : 2@H_404_12@; }

func@H_404_12@ setBacon(choice: Bool@H_404_12@) { self@H_404_12@.bacon@H_404_12@ = choice; }

func@H_404_12@ buildObject(name: String@H_404_12@) -> Burger@H_404_12@ {

return@H_404_12@ Burger@H_404_12@(name: name,veggie:veggie@H_404_12@,patties: patties@H_404_12@,

pickles:pickles@H_404_12@,mayo: mayo@H_404_12@,ketchup:ketchup@H_404_12@,

lettuce:lettuce@H_404_12@,cook: cooked@H_404_12@,bacon:bacon@H_404_12@);

}

class@H_404_12@ func@H_404_12@ getBuilder(burgerType:Burgers@H_404_12@) ->BurgerBuilder@H_404_12@ {

var@H_404_12@ builder:BurgerBuilder@H_404_12@;

switch@H_404_12@ (burgerType) {

case@H_404_12@ .BIGBURGER: builder = BigBurgerBuilder@H_404_12@();

case@H_404_12@ .SUPERVEGGIE: builder = SuperVeggieBurgerBuilder@H_404_12@();

case@H_404_12@ .STANDARD: builder = BurgerBuilder@H_404_12@();

}

return@H_404_12@ builder;

}

}


class@H_404_12@ BigBurgerBuilder :BurgerBuilder@H_404_12@ {

@H_404_12@private @H_404_12@ override @H_404_12@init() {@H_404_12@

super@H_404_12@.init@H_404_12@();

self@H_404_12@.patties@H_404_12@ =4@H_404_12@;

self@H_404_12@.bacon@H_404_12@ =false@H_404_12@;

}

override@H_404_12@ func@H_404_12@ addPatty(choice:Bool@H_404_12@) {

@H_404_12@fatalError@H_404_12@(@H_404_12@"Cannot add patty to Big Burger");@H_404_12@

}

}


class@H_404_12@ SuperVeggieBurgerBuilder :BurgerBuilder@H_404_12@ {

@H_404_12@private @H_404_12@ override @H_404_12@init() {@H_404_12@

super@H_404_12@.init@H_404_12@();

self@H_404_12@.veggie@H_404_12@ =true@H_404_12@;

self@H_404_12@.bacon@H_404_12@ =false@H_404_12@;

}

override@H_404_12@ func@H_404_12@ setVeggie(choice:Bool@H_404_12@) {

@H_404_12@// do nothing - always veggie

}

override@H_404_12@ func@H_404_12@ setBacon(choice:Bool@H_404_12@) {

@H_404_12@fatalError@H_404_12@(@H_404_12@"Cannot add bacon to this burger");@H_404_12@

}

}

猜你在找的Swift相关文章