java8建造者模式构建集合_两种语言实现设计模式(C++和Java)(八:建造者模式)...

2023-05-16

建造者(Builder)模式的定义:指将一个复杂对象的构造与它的表示分离,使同样的构建过程可以创建不同的表示,这样的设计模式被称为建造者模式。它是将一个复杂的对象分解为多个简单的对象,然后一步一步构建而成。它将变与不变相分离,即产品的组成部分是不变的,但每一部分是可以灵活选择的。

20190514213011243139.png

建造者模式主要包括以下角色:

1.产品:包含多个组件的复杂对象,各组件由建造者来创建。

2.抽象建造者(builder):一个包含创建产品各个子部件的抽象方法的接口,通常还包含一个返回复杂产品的方法 getResult()。

3.具体建造者ConcreteBuilder,建造者的具体实现,完成复杂产品的各个部件的具体创建方法。

4.指挥者Director:它调用建造者对象中的部件构造与装配方法完成复杂对象的创建,在指挥者中不涉及具体产品的信息。

1.C++代码

1 #include

2

3 using namespacestd;4

5 //产品:车

6 classCar{7 private:8 stringwheels;9 stringmotor;10 stringstructure;11 public:12 void setWheels(string_wheels){13 this->wheels =_wheels;14 }15

16 void setMotor(string_motor){17 this->motor =_motor;18 }19

20 void setStructure(string_structure){21 this->structure =_structure;22 }23

24 voidprint(){25 cout<< "Wheel:" << this->wheels << ‘\n‘

26 << "Motor:" << this->motor << ‘\n‘

27 << "Structure:" << this->structure << ‘\n‘ <

31 //建造者:车厂

32 classCarFactory{33 protected:34 Car* product = newCar();35 public:36 virtual void buildWheels()=0;37 virtual void buildMotor()=0;38 virtual void buildStructure()=0;39 Car*getResult(){40 returnproduct;41 }42 };43

44 class CarFactoryBmw: publicCarFactory45 {46 public:47 voidbuildWheels(){48 product->setWheels("BMW Wheels");49 }50 voidbuildMotor(){51 product->setMotor("BMW Motor");52 }53 voidbuildStructure(){54 product->setStructure("BMW Structure");55 }56 };57

58 class CarFactoryBenz: publicCarFactory59 {60 public:61 voidbuildWheels(){62 product->setWheels("Benz Wheels");63 }64 voidbuildMotor(){65 product->setMotor("Benz Motor");66 }67 voidbuildStructure(){68 product->setStructure("Benz Structure");69 }70 };71

72 //指挥者:项目经理

73 classManager74 {75 private:76 CarFactory*factory;77 public:78 Manager(CarFactory*_factory) {79 factory =_factory;80 }81

82 Car*decorate(){83 factory->buildMotor();84 factory->buildWheels();85 factory->buildStructure();86 return factory->getResult();87 }88 };89

90 intmain()91 {92 CarFactory* factoryBmw = newCarFactoryBmw();93 CarFactory* factoryBenz = newCarFactoryBenz();94 Manager *pManagerBmw = newManager(factoryBmw);95 Manager* pManagerBenz = newManager(factoryBenz);96 pManagerBmw->decorate();97 Car* carBmw = factoryBmw->getResult();98 carBmw->print();99 pManagerBenz->decorate();100 Car* carBenz = factoryBenz->getResult();101 carBenz->print();102 return 0;103 }

输出:

Wheel:BMW Wheels

Motor:BMW Motor

Structure:BMW Structure

Wheel:Benz Wheels

Motor:Benz Motor

Structure:Benz Structure

2.Java代码

1 public classCar {2

3 privateString wheels;4 privateString motor;5 privateString structure;6

7 public voidsetWheels(String wheels){8 this.wheels =wheels;9 }10

11 public voidsetMotor(String motor){12 this.motor =motor;13 }14

15 public voidsetStructure(String structure){16 this.structure =structure;17 }18

19 public voidprint(){20 System.out.println("Wheels:"+ wheels + ‘\n‘ + "Motor:" + motor + ‘\n‘ + "Structure:" + structure + ‘\n‘);21 }22 }23

24 public abstract classCarFactory {25

26 publicCarFactory(){27 production = newCar();28 }29

30 protectedCar production;31

32 public abstract voidbuildWheels();33

34 public abstract voidbuildMotor();35

36 public abstract voidbuildStructure();37

38 Car getResult(){39 returnproduction;40 }41

42 }43

44 public class CarFactoryBmw extendsCarFactory {45

46 @Override47 public voidbuildMotor() {48 this.production.setMotor("Bmw Motor");49 }50

51 @Override52 public voidbuildWheels() {53 this.production.setWheels("Bmw Wheels");54 }55

56 @Override57 public voidbuildStructure() {58 this.production.setStructure("Bmw structure");59 }60 }61

62 public class CarFactoryBenz extendsCarFactory {63

64 @Override65 public voidbuildMotor() {66 this.production.setMotor("Benz Motor");67 }68

69 @Override70 public voidbuildWheels() {71 this.production.setWheels("Benz Wheels");72 }73

74 @Override75 public voidbuildStructure() {76 this.production.setStructure("Benz structure");77 }78 }79

80 public classManager {81

82 privateCarFactory factory;83

84 publicManager(CarFactory factory){85 this.factory =factory;86 }87

88 public voidchangeFactory(CarFactory factory){89 this.factory =factory;90 }91

92 publicCar decorate(){93 factory.buildMotor();94 factory.buildWheels();95 factory.buildStructure();96 returnfactory.getResult();97 }98 }99

100 public classMain {101

102 public static voidmain(String[] args) {103 CarFactory factoryBenz = newCarFactoryBenz();104 CarFactory factoryBmw = newCarFactoryBmw();105 Manager manager = newManager(factoryBenz);106 manager.decorate();107 factoryBenz.getResult().print();108 manager.changeFactory(factoryBmw);109 manager.decorate();110 factoryBmw.getResult().print();111 }112 }

原文:https://www.cnblogs.com/Asp1rant/p/10864478.html

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

java8建造者模式构建集合_两种语言实现设计模式(C++和Java)(八:建造者模式)... 的相关文章

随机推荐