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

本文介绍了建造者模式,将其应用于创建不同类型的车,并分别展示了C++和Java的实现。通过抽象建造者接口,具体建造者类以及指挥者类,实现了构建车的不同部件,如轮子、引擎和车身,允许构建不同品牌的车。
摘要由CSDN通过智能技术生成

建造者(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

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值