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