builder pattern director construct(field_listwith open("form_file html"' 'as ff write"{ ! }formatdirector get_constructed_object(our new script can only build forms with text fieldscheckboxesand basic button you can add more field types as an exercise one of the concretebuilder classes has the logic needed for the creation of the webform you want director calls the create(method in this waythe logic for creating different kinds of products gets abstracted note how the builder pattern focuses on building the form step by step this is in stark contrast to the abstract factorywhere family of products can be created and returned immediately using polymorphism since the builder pattern separates the construction of complex object from its representationyou can now use the same construction process to create forms in different representationsfrom native app interface code to simple text field an added benefit of this separation is reduction in object sizewhich leads to cleaner code we have better control over the construction process and the modular nature allow us to easily make changes to the internal representation of objects the biggest downside is that this pattern requires that we create concretebuilder builders for each type of product that you want to create sowhen should you not use the builder patternwhen you are constructing mutable objects that provide means of modifying the configuration values after the object has been constructed you should also avoid this pattern if there are very few constructorsthe constructors are simpleor there are no reasonable default values for any of the constructor parameters and all of them must be specified explicitly  note on abstraction when we talk about abstractionin the most basic terms we refer to the process of associating names to things machine code is abstracted in using labels for the machine instructionswhich are set of hexadecimal instructionswhich in turn is an