71 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
			
		
		
	
	
			71 lines
		
	
	
		
			1.8 KiB
		
	
	
	
		
			Markdown
		
	
	
	
	
	
| ---
 | |
| title: Builder
 | |
| ---
 | |
| 
 | |
| The builder is a design pattern that could abstract and decouple the creation of a very complex object.
 | |
| 
 | |
| ## Builder in Python
 | |
| Here is an example of Builder Pattern implementation in Python3.
 | |
| 
 | |
| 
 | |
| ```python
 | |
| # Builder
 | |
| class CourseBuilder(object):
 | |
|     def __init__(self, teacher):
 | |
|         self.teacher = teacher
 | |
| 
 | |
|     def build_course(self):
 | |
|         self.teacher.provide_homework()
 | |
|         self.teacher.provide_exam()
 | |
|         return self.teacher.course
 | |
| 
 | |
| # Teacher
 | |
| class Teacher(object):
 | |
|     def __init__(self, name=None):
 | |
|         self.name = name
 | |
|         self.course = Course()
 | |
| 
 | |
|     def provide_homework(self):
 | |
|         raise NotImplementedError
 | |
| 
 | |
|     def provide_exam(self):
 | |
|         raise NotImplementedError
 | |
| 
 | |
| 
 | |
| class MathTeacher(Teacher):
 | |
|     def provide_homework(self):
 | |
|         self.course.homework = 'This is Math homework provided by {}.'.format(self.name)
 | |
| 
 | |
|     def provide_exam(self):
 | |
|         self.course.exam = 'This is Math exam tested by {}.'.format(self.name)
 | |
| 
 | |
| 
 | |
| class HistoryTeacher(Teacher):
 | |
|     def provide_homework(self):
 | |
|         self.course.homework = 'This is History homework provided by {}.'.format(self.name)
 | |
| 
 | |
|     def provide_exam(self):
 | |
|         self.course.exam = 'This is History exam tested by {}.'.format(self.name)
 | |
| 
 | |
| 
 | |
| # Target objects to be produced
 | |
| class Course(object):
 | |
|     def __init__(self):
 | |
|         self.homework = None
 | |
|         self.exam = None
 | |
| 
 | |
|     def __str__(self):
 | |
|         return 'Homework: {}\nExam: {}\n'.format(self.homework, self.exam)
 | |
| 
 | |
| 
 | |
| math_course = CourseBuilder(MathTeacher('Harry')).build_course()
 | |
| print(math_course)
 | |
| >>> Homework: This is Math homework provided by Harry.
 | |
| >>> Exam: This is Math exam tested by Harry.
 | |
| 
 | |
| history_course = CourseBuilder(HistoryTeacher('Potter')).build_course()
 | |
| print(history_course)
 | |
| >>> Homework: This is History homework provided by Potter.
 | |
| >>> Exam: This is History exam tested by Potter.
 | |
| ```
 |