加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

swift - The Builder Pattern

发布时间:2020-12-14 01:56:09 所属栏目:百科 来源:网络整理
导读:利用类构造函数默认参数,创建一个类。 之所以用Builder Pattern是因为要根据不同属性来创建不同的对象。 正如如下步骤:1.name 2.选择一个产品 3.客户定制一个产品 client: // Step 1 - Ask for name let name = "Joe" ; // Step 2 - Select a Product let

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

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

}

}

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读