swift - The Builder Pattern

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

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

之所以用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);


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


order.printDescription();



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

pattern:


@H_404_10@enum Burgers {

@H_404_10@ case STANDARD; case BIGBURGER;case SUPERVEGGIE;

@H_404_10@}


@H_404_10@class BurgerBuilder {

@H_404_10@ private var veggie =false;

@H_404_10@ private var pickles =false;

@H_404_10@ private var mayo =true;

@H_404_10@ private var ketchup =true;

@H_404_10@ private var lettuce =true;

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

@H_404_10@ private var patties =2;

@H_404_10@ private var bacon =true;

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@}


@H_404_10@class BigBurgerBuilder :BurgerBuilder {

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@}


@H_404_10@class SuperVeggieBurgerBuilder :BurgerBuilder {

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@}

猜你在找的Swift相关文章