File tree Expand file tree Collapse file tree 7 files changed +129
-1
lines changed Expand file tree Collapse file tree 7 files changed +129
-1
lines changed Original file line number Diff line number Diff line change @@ -3,4 +3,5 @@ project(builder)
3
3
#add_executable(motivation src/motivation_demo.cpp)
4
4
#add_executable(motivation_v1 src/motivation_improved_v1.cpp)
5
5
#add_executable(fluent_builder src/fluent_builder.cpp)
6
- add_executable (groovy_style_builder src/groovy_style_builder.cpp)
6
+ #add_executable(groovy_style_builder src/groovy_style_builder.cpp)
7
+ add_executable (builder_facet src/Person.cpp src/PersonBuilder.cpp)
Original file line number Diff line number Diff line change
1
+ //
2
+ // Created by sajith on 6/13/22.
3
+ //
4
+
5
+ #include " Person.h"
6
+
7
+ PersonBuilder Person::create ()
8
+ {
9
+ return PersonBuilder ();
10
+ }
Original file line number Diff line number Diff line change
1
+ //
2
+ // Created by sajith on 6/13/22.
3
+ //
4
+
5
+ #ifndef DESIGN_PATTERNS_PERSON_H
6
+ #define DESIGN_PATTERNS_PERSON_H
7
+
8
+ #include < string>
9
+
10
+ class PersonBuilder ;
11
+
12
+ class Person
13
+ {
14
+ std::string street_address;
15
+ std::string post_code;
16
+ std::string city;
17
+ std::string company_name;
18
+ std::string position;
19
+
20
+ int annual_income{0 };
21
+
22
+ static PersonBuilder create ();
23
+
24
+ friend class PersonBuilder ;
25
+
26
+ friend class PersonJobBuilder ;
27
+
28
+ friend class PersonAdressBuilder ;
29
+
30
+
31
+ };
32
+
33
+
34
+ #endif // DESIGN_PATTERNS_PERSON_H
Original file line number Diff line number Diff line change
1
+ //
2
+ // Created by sajith on 6/18/22.
3
+ //
4
+
5
+ #ifndef DESIGN_PATTERNS_PERSONADDRESSBUILDER_H
6
+ #define DESIGN_PATTERNS_PERSONADDRESSBUILDER_H
7
+
8
+ class PersonAddressBuilder : public PersonBuilderBase
9
+ {
10
+ typedef PersonAddressBuilder Self;
11
+ public:
12
+ PersonAddressBuilder (Person &person) : PersonBuilderBase(person) {
13
+
14
+ }
15
+
16
+ };
17
+
18
+ #endif // DESIGN_PATTERNS_PERSONADDRESSBUILDER_H
Original file line number Diff line number Diff line change
1
+ //
2
+ // Created by sajith on 6/13/22.
3
+ //
4
+
5
+ #include " PersonBuilder.h"
6
+ #include " PersonAddressBuilder.h"
7
+ #include " PersonJobBuilder.h"
8
+
9
+
10
+ PersonBuilderBase::PersonBuilderBase (Person &person) : person(person) {}
11
+
12
+ PersonBuilder::PersonBuilder () : PersonBuilderBase(p) {}
13
+
14
+ PersonAddressBuilder PersonBuilder::lives () const
15
+ {
16
+ return PersonAdressBuilder{person};
17
+ }
18
+
19
+ PersonJobBuilder PersonBuilder::works () const
20
+ {
21
+ return PersonJobBuilder{person};
22
+ }
Original file line number Diff line number Diff line change
1
+ //
2
+ // Created by sajith on 6/13/22.
3
+ //
4
+
5
+ #ifndef DESIGN_PATTERNS_PERSONBUILDER_H
6
+ #define DESIGN_PATTERNS_PERSONBUILDER_H
7
+
8
+ #include " Person.h"
9
+
10
+ class PersonJobBuilder ;
11
+
12
+ class PersonAddressBuilder ;
13
+
14
+ class PersonBuilderBase
15
+ {
16
+ protected:
17
+ Person &person;
18
+
19
+ public:
20
+ PersonBuilderBase (Person &person);
21
+ };
22
+
23
+ class PersonBuilder : public PersonBuilderBase
24
+ {
25
+ Person p;
26
+ public:
27
+ PersonBuilder ();
28
+
29
+ PersonAddressBuilder lives () const ;
30
+
31
+ PersonJobBuilder works () const ;
32
+ };
33
+
34
+
35
+ #endif // DESIGN_PATTERNS_PERSONBUILDER_H
Original file line number Diff line number Diff line change
1
+ //
2
+ // Created by sajith on 6/18/22.
3
+ //
4
+
5
+ #ifndef DESIGN_PATTERNS_PERSONJOBBUILDER_H
6
+ #define DESIGN_PATTERNS_PERSONJOBBUILDER_H
7
+
8
+ #endif //DESIGN_PATTERNS_PERSONJOBBUILDER_H
You can’t perform that action at this time.
0 commit comments