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.
							 | 
						||
| 
								 | 
							
								```
							 |