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