swift - The Builder Pattern

swift - The Builder Pattern,第1张

概述利用类构造函数默认参数,创建一个类。 之所以用Builder Pattern是因为要根据不同属性来创建不同的对象。 正如如下步骤:1.name 2.选择一个产品 3.客户定制一个产品 client: // Step 1 - Ask for name let name ="Joe"; // Step 2 - Select a Product let builder =BurgerBuilder.ge

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

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

}

}

总结

以上是内存溢出为你收集整理的swift - The Builder Pattern全部内容,希望文章能够帮你解决swift - The Builder Pattern所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/web/1085758.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-27
下一篇2022-05-27

发表评论

登录后才能评论

评论列表(0条)

    保存