{"id":321451,"date":"2021-04-14T21:00:15","date_gmt":"2021-04-14T21:00:15","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=321451"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=321451","title":{"rendered":"\u041f\u0430\u0442\u0442\u0435\u0440\u043d \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f Builder (\u0421\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u044c) \u0432 Java"},"content":{"rendered":"\n<div class=\"post__text post__text_v2\" id=\"post-content-body\">\n<blockquote>\n<p><em>\u0412 \u043f\u0440\u0435\u0434\u0434\u0432\u0435\u0440\u0438\u0438 \u0441\u043a\u043e\u0440\u043e\u0433\u043e \u0441\u0442\u0430\u0440\u0442\u0430 \u043a\u0443\u0440\u0441\u0430 <\/em><a href=\"https:\/\/otus.pw\/UKVcm\/\"><strong><em>\u00ab\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f\u00bb<\/em><\/strong><\/a><em> \u0434\u0435\u043b\u0438\u043c\u0441\u044f \u0441 \u0432\u0430\u043c\u0438 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430. <\/p>\n<p>\u041f\u0440\u0438\u0433\u043b\u0430\u0448\u0430\u0435\u043c \u0442\u0430\u043a\u0436\u0435 \u0432\u0441\u0435\u0445 \u0436\u0435\u043b\u0430\u044e\u0449\u0438\u0445 \u043d\u0430 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u0434\u0435\u043c\u043e-\u0443\u0440\u043e\u043a <\/em><a href=\"https:\/\/otus.pw\/gfjU\/\"><strong><em>\u00ab\u0428\u0430\u0431\u043b\u043e\u043d\u044b GRASP\u00bb<\/em><\/strong><\/a><em>. \u041d\u0430 \u044d\u0442\u043e\u043c \u0437\u0430\u043d\u044f\u0442\u0438\u0438 \u043c\u044b \u043f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430 \u0438 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c 9 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 GRASP. \u041f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0439\u0442\u0435\u0441\u044c!<\/em><\/p>\n<\/blockquote>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/179\/4b7\/7e4\/1794b77e477a1e5ea30321d8154b6003.png\" width=\"780\" height=\"439\"><figcaption><\/figcaption><\/figure>\n<hr>\n<p>\u0410 \u0432\u043e\u0442 \u0438 \u044f \u0441\u043e \u0441\u0432\u043e\u0435\u0439 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435\u0439 \u043e \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u0430\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u043e \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f Builder (\u043e\u043d \u0436\u0435 \u0421\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u044c). \u041e\u0447\u0435\u043d\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0439 \u043f\u0430\u0442\u0442\u0435\u0440\u043d \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0430\u043c \u0448\u0430\u0433 \u0437\u0430 \u0448\u0430\u0433\u043e\u043c \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b.<\/p>\n<h3>\u041f\u0430\u0442\u0442\u0435\u0440\u043d \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f Builder&nbsp;<\/h3>\n<ul>\n<li>\n<p>\u041f\u0430\u0442\u0442\u0435\u0440\u043d \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f Builder \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d \u0434\u043b\u044f \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f \u0433\u0438\u0431\u043a\u043e\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438.<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p>\u041f\u0430\u0442\u0442\u0435\u0440\u043d \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f Builder \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0442\u0434\u0435\u043b\u0438\u0442\u044c \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043e\u0442 \u0435\u0433\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f.<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p>\u041f\u0430\u0442\u0442\u0435\u0440\u043d Builder \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0438 \u043f\u043e\u044d\u0442\u0430\u043f\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434.<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p>\u041f\u0430\u0442\u0442\u0435\u0440\u043d \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u0434\u0438\u043d \u0438\u0437 \u043b\u0443\u0447\u0448\u0438\u0445 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432.<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p>\u042d\u0442\u043e \u043e\u0434\u0438\u043d \u0438\u0437 <a href=\"https:\/\/en.wikipedia.org\/wiki\/Design_Patterns\">\u043f\u0430\u0442\u0442\u0435\u0440\u043d\u043e\u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u0430\u043d\u0434\u044b \u0447\u0435\u0442\u044b\u0440\u0435\u0445 (GoF),<\/a> \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442, \u043a\u0430\u043a \u0440\u0435\u0448\u0430\u0442\u044c \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0449\u0438\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u043c \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u0438.<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p>\u042d\u0442\u043e\u0442 \u043f\u0430\u0442\u0442\u0435\u0440\u043d \u043f\u043e\u043b\u0435\u0437\u0435\u043d \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u0438\u043c\u043c\u0443\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u0434\u043d\u043e\u0433\u043e \u0438 \u0442\u043e\u0433\u043e \u0436\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u0430\u0442\u0442\u0435\u0440\u043d Builder \u2014 \u044d\u0442\u043e \u043f\u0430\u0442\u0442\u0435\u0440\u043d \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u043e\u044d\u0442\u0430\u043f\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0447\u0435\u0442\u043a\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439. \u0421\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c-\u0440\u0430\u0441\u043f\u043e\u0440\u044f\u0434\u0438\u0442\u0435\u043b\u0435\u043c (director), \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u0437\u043d\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0438\u043f \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430.<\/p>\n<figure class=\"full-width\"><img loading=\"lazy\" decoding=\"async\" src=\"https:\/\/habrastorage.org\/getpro\/habr\/upload_files\/5be\/75b\/89c\/5be75b89c5b0ee93b2db8e81711ac07d.png\" width=\"804\" height=\"396\"><figcaption><\/figcaption><\/figure>\n<p>\u0418\u0442\u0430\u043a, \u043f\u0430\u0442\u0442\u0435\u0440\u043d \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f Builder \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u0431\u0438\u0442\u044c \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0432\u0430\u0436\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b:<\/p>\n<ul>\n<li>\n<p><strong>Product (\u043f\u0440\u043e\u0434\u0443\u043a\u0442)<\/strong> &#8212; \u041a\u043b\u0430\u0441\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u0448\u0430\u0433 \u0437\u0430 \u0448\u0430\u0433\u043e\u043c \u0441\u043a\u043e\u043d\u0441\u0442\u0440\u0443\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b.<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p><strong>Builder (\u0441\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u044c)<\/strong> &#8212; \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441\/\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0432\u0441\u0435 \u044d\u0442\u0430\u043f\u044b, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0434\u043b\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0430 \u0441\u043b\u043e\u0436\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430-<strong>\u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430<\/strong>. \u041a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0437\u0434\u0435\u0441\u044c \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f (\u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u043e) \u0432\u0441\u0435 \u044d\u0442\u0430\u043f\u044b (buildPart), \u0430 \u0438\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a \u043a\u043b\u0430\u0441\u0441\u0430\u043c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0441\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u0435\u0439 (ConcreteBuilder).<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p><strong>ConcreteBuilder (\u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u0441\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u044c)<\/strong> &#8212; \u043a\u043b\u0430\u0441\u0441-\u0441\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u044c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043a\u043e\u0434 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430-<strong>\u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430<\/strong>. \u0423 \u043d\u0430\u0441 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437\u043d\u044b\u0445 <strong>ConcreteBuilder<\/strong>-\u043a\u043b\u0430\u0441\u0441\u043e\u0432, \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u0443\u044e \u0440\u0430\u0437\u043d\u043e\u0432\u0438\u0434\u043d\u043e\u0441\u0442\u044c \u0438\u043b\u0438 \u0441\u043f\u043e\u0441\u043e\u0431 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430-<strong>\u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430<\/strong>.<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p><strong>Director (\u0440\u0430\u0441\u043f\u043e\u0440\u044f\u0434\u0438\u0442\u0435\u043b\u044c)<\/strong> &#8212; \u0441\u0443\u043f\u0435\u0440\u0432\u0438\u0437\u0438\u043e\u043d\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441, \u043f\u043e\u0434 \u043a\u043e\u043d\u0440\u043e\u043b\u0435\u043c \u043a\u043e\u0442\u0440\u043e\u0433\u043e \u0441\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0441\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u044d\u0442\u0430\u043f\u044b \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430-\u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430. \u0420\u0430\u0441\u043f\u043e\u0440\u044f\u0434\u0438\u0442\u0435\u043b\u044c \u043e\u0431\u044b\u0447\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434 \u0441\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u044f \u0441 \u044d\u0442\u0430\u043f\u0430\u043c\u0438 \u043d\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0432 \u0447\u0435\u0442\u043a\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430-\u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430.<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u041f\u0430\u0442\u0442\u0435\u0440\u043d \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/strong> <strong>Builder <\/strong>\u0440\u0435\u0448\u0430\u0435\u0442 \u0442\u0430\u043a\u0438\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u043a\u0430\u043a:<\/p>\n<ul>\n<li>\n<p>\u041a\u0430\u043a \u043a\u043b\u0430\u0441\u0441 (\u0442\u043e\u0442 \u0436\u0435 \u0441\u0430\u043c\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0441\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0430) \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430?<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p>\u041a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u043a\u043b\u0430\u0441\u0441, \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0449\u0438\u0439\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435\u043c \u0441\u043b\u043e\u0436\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430?<\/p>\n<\/li>\n<\/ul>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440 \u0441\u043e \u0441\u0431\u043e\u0440\u043a\u043e\u0439 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u0435\u0439, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043f\u0430\u0442\u0442\u0435\u0440\u043d \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f Builder.<\/p>\n<h3>\u041f\u0440\u0438\u043c\u0435\u0440 \u0441\u043e \u0441\u0431\u043e\u0440\u043a\u043e\u0439 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u0435\u0439 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f Builder<\/h3>\n<p><strong>\u0428\u0430\u0433 1:<\/strong> \u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u043a\u043b\u0430\u0441\u0441 <strong>Car <\/strong>(\u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u043c:<\/p>\n<pre><code class=\"java\">package org.trishinfotech.builder;  public class Car {      private String chassis;     private String body;     private String paint;     private String interior;          public Car() {          super();     }      public Car(String chassis, String body, String paint, String interior) {         this();         this.chassis = chassis;         this.body = body;         this.paint = paint;         this.interior = interior;     }      public String getChassis() {         return chassis;     }  \t\tpublic void setChassis(String chassis) {         this.chassis = chassis;      }      public String getBody() {         return body;     }      public void setBody(String body) {         this.body = body;     }      public String getPaint() {         return paint;     }      public void setPaint(String paint) {         this.paint = paint;     } \t\tpublic String getInterior() {         return interior;     }      public void setInterior(String interior) {         this.interior = interior;     }      public boolean doQualityCheck() {         return (chassis != null &amp;&amp; !chassis.trim().isEmpty()) &amp;&amp; (body != null &amp;&amp; !body.trim().isEmpty())                 &amp;&amp; (paint != null &amp;&amp; !paint.trim().isEmpty()) &amp;&amp; (interior != null &amp;&amp; !interior.trim().isEmpty());     }      @Override     public String toString() {         \/\/ StringBuilder class also uses Builder Design Pattern with implementation of java.lang.Appendable interface         StringBuilder builder = new StringBuilder();         builder.append(\"Car [chassis=\").append(chassis).append(\", body=\").append(body).append(\", paint=\").append(paint)         return builder.toString();     }  }<\/code><\/pre>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u044f \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u0432 \u043a\u043b\u0430\u0441\u0441 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u0447\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 <code>doQualityCheck<\/code>. \u042f \u0441\u0447\u0438\u0442\u0430\u044e, \u0447\u0442\u043e Builder \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u0435\u043f\u043e\u043b\u043d\u044b\u0435 \u0438\u043b\u0438 \u043d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0435 Product-\u043e\u0431\u044a\u0435\u043a\u0442\u044b. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u043c \u0432 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 \u0441\u0431\u043e\u0440\u043a\u0438 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u0435\u0439.<\/p>\n<p><strong>\u0428\u0430\u0433 2:<\/strong> \u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441\/\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 <code>CarBuilder<\/code>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u0435 \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0448\u0430\u0433\u0438 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044f.<\/p>\n<pre><code class=\"java\">package org.trishinfotech.builder;  public interface CarBuilder {      \/\/ \u042d\u0442\u0430\u043f 1     public CarBuilder fixChassis();      \/\/ \u042d\u0442\u0430\u043f 2     public CarBuilder fixBody();      \/\/ \u042d\u0442\u0430\u043f 3     public CarBuilder paint();      \/\/ \u042d\u0442\u0430\u043f 4      public CarBuilder fixInterior();      \/\/ \u0412\u044b\u043f\u0443\u0441\u043a \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044f      public Car build(); }<\/code><\/pre>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u044f \u0441\u0434\u0435\u043b\u0430\u043b \u0442\u0438\u043f <code>CarBuilder<\/code> \u0442\u0438\u043f\u043e\u043c \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 \u0432\u0441\u0435\u0445 \u044d\u0442\u0430\u043f\u043e\u0432, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0445 \u0437\u0434\u0435\u0441\u044c. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043d\u0430\u043c \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u044d\u0442\u0430\u043f\u044b \u043f\u043e \u0446\u0435\u043f\u043e\u0447\u043a\u0435. \u0417\u0434\u0435\u0441\u044c \u0435\u0441\u0442\u044c \u043e\u0434\u0438\u043d \u043e\u0447\u0435\u043d\u044c \u0432\u0430\u0436\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 <code>build<\/code><em>,<\/em> \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0438\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 <code>Car<\/code>. \u042d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0433\u043e\u0434\u043d\u043e\u0441\u0442\u044c \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044f \u0438 \u0432\u044b\u043f\u0443\u0441\u043a\u0430\u0435\u0442 (\u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442) \u0435\u0433\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u0435\u0433\u043e \u0441\u0431\u043e\u0440\u043a\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u043e (\u0432\u0441\u0435 \u0432\u0430\u043b\u0438\u0434\u043d\u043e).<\/p>\n<p><strong>\u0428\u0430\u0433 3:<\/strong> \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0440\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c <code>ConcreteBuilder<\/code>. \u041a\u0430\u043a \u044f \u0443\u0436\u0435 \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043b, \u0443 \u043d\u0430\u0441 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b <code>ConcreteBuilder<\/code>, \u0438 \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043d\u0438\u0445 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0441\u0431\u043e\u0440\u043a\u0443 \u043f\u043e-\u0441\u0432\u043e\u0435\u043c\u0443, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043d\u0430\u043c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 <code>Car<\/code>.<\/p>\n<p>\u0418\u0442\u0430\u043a, \u043d\u0438\u0436\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d \u043a\u043e\u0434 <code>ClassicCarBuilder<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u0441\u0442\u0430\u0440\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u0435\u0439.<\/p>\n<pre><code class=\"java\">package org.trishinfotech.builder;  public class ClassicCarBuilder implements CarBuilder {      private String chassis;     private String body;     private String paint;     private String interior;      public ClassicCarBuilder() {         super();     }      @Override     public CarBuilder fixChassis() {         System.out.println(\"Assembling chassis of the classical model\");         this.chassis = \"Classic Chassis\";         return this;     }      @Override     public CarBuilder fixBody() {         System.out.println(\"Assembling body of the classical model\");         this.body = \"Classic Body\";         return this;     }      @Override     public CarBuilder paint() {         System.out.println(\"Painting body of the classical model\");         this.paint = \"Classic White Paint\";         return this;     }        @Override     public CarBuilder fixInterior() {         System.out.println(\"Setting up interior of the classical model\");         this.interior = \"Classic interior\";         return this;     }      @Override \t\tpublic Car build() {         Car car = new Car(chassis, body, paint, interior);         if (car.doQualityCheck()) {             return car;         } else {             System.out.println(\"Car assembly is incomplete. Can't deliver!\");         }         return null;     }  }<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u0441\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u044c <code>ModernCarBuilder<\/code> \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044f.<\/p>\n<pre><code class=\"java\">package org.trishinfotech.builder;  public class ModernCarBuilder implements CarBuilder {      private String chassis;     private String body;     private String paint;     private String interior;      public ModernCarBuilder() {         super();     }      @Override     public CarBuilder fixChassis() {         System.out.println(\"Assembling chassis of the modern model\");         this.chassis = \"Modern Chassis\";         return this;     }      @Override     public CarBuilder fixBody() {         System.out.println(\"Assembling body of the modern model\");         this.body = \"Modern Body\";         return this;     }        @Override     public CarBuilder paint() {         System.out.println(\"Painting body of the modern model\");         this.paint = \"Modern Black Paint\";         return this;     }      @Override     public CarBuilder fixInterior() {         System.out.println(\"Setting up interior of the modern model\");         this.interior = \"Modern interior\";         return this;     }      @Override     public Car build() {         Car car = new Car(chassis, body, paint, interior);         if (car.doQualityCheck()) {             return car;         } else {             System.out.println(\"Car assembly is incomplete. Can't deliver!\");         }         return null;     } }<\/code><\/pre>\n<p>&nbsp;\u0418 \u0435\u0449\u0435 \u043e\u0434\u0438\u043d <code>SportsCarBuilder<\/code> \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u043f\u043e\u0440\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044f.<\/p>\n<pre><code class=\"java\">package org.trishinfotech.builder;  public class SportsCarBuilder implements CarBuilder {      private String chassis;     private String body;     private String paint;     private String interior;      public SportsCarBuilder() {         super();     }      @Override     public CarBuilder fixChassis() {         System.out.println(\"Assembling chassis of the sports model\");         this.chassis = \"Sporty Chassis\";         return this;     }       @Override     public CarBuilder fixBody() {         System.out.println(\"Assembling body of the sports model\");         this.body = \"Sporty Body\";         return this;     }        @Override     public CarBuilder paint() {         System.out.println(\"Painting body of the sports model\");         this.paint = \"Sporty Torch Red Paint\";         return this;     }      @Override     public CarBuilder fixInterior() {         System.out.println(\"Setting up interior of the sports model\");         this.interior = \"Sporty interior\";         return this;     }      @Override     public Car build() {         Car car = new Car(chassis, body, paint, interior);         if (car.doQualityCheck()) {             return car;         } else {             System.out.println(\"Car assembly is incomplete. Can't deliver!\");         }         return null;     }  }<\/code><\/pre>\n<p><strong>\u0428\u0430\u0433 4:<\/strong> \u0422\u0435\u043f\u0435\u0440\u044c \u043c\u044b \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u043a\u043b\u0430\u0441\u0441-\u0440\u0430\u0441\u043f\u043e\u0440\u044f\u0434\u0438\u0442\u0435\u043b\u044c <code>AutomotiveEngineer<\/code>, \u043f\u043e\u0434 \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u043e\u043c \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u0441\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u044c \u0431\u0443\u0434\u0435\u0442 \u0441\u043e\u0431\u0438\u0440\u0430\u0442\u044c \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c (\u043e\u0431\u044a\u0435\u043a\u0442 <code>Car<\/code>) \u0448\u0430\u0433 \u0437\u0430 \u0448\u0430\u0433\u043e\u043c \u0432 \u0447\u0435\u0442\u043a\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435.<\/p>\n<pre><code class=\"java\">package org.trishinfotech.builder;  public class AutomotiveEngineer {      private CarBuilder builder;      public AutomotiveEngineer(CarBuilder builder) {         super();         this.builder = builder;         if (this.builder == null) {             throw new IllegalArgumentException(\"Automotive Engineer can't work without Car Builder!\");         }     }      public Car manufactureCar() {         return builder.fixChassis().fixBody().paint().fixInterior().build();     }  }<\/code><\/pre>\n<p>&nbsp;\u041c\u044b \u0432\u0438\u0434\u0438\u043c, \u0447\u0442\u043e \u043c\u0435\u0442\u043e\u0434 <code>manufactureCar<\/code> \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u0442 \u044d\u0442\u0430\u043f\u044b \u0441\u0431\u043e\u0440\u043a\u0438 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044f \u0432 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0438\u0448\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043b\u0430\u0441\u0441 <code>Main<\/code> \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0430\u0448\u0435\u0433\u043e \u043a\u043e\u0434\u0430.<\/p>\n<pre><code class=\"java\">package org.trishinfotech.builder;  public class Main {      public static void main(String[] args) {         CarBuilder builder = new SportsCarBuilder();         AutomotiveEngineer engineer = new AutomotiveEngineer(builder);         Car car = engineer.manufactureCar();         if (car != null) {             System.out.println(\"Below car delievered: \");             System.out.println(\"======================================================================\");             System.out.println(car);             System.out.println(\"======================================================================\");         }     }  }<\/code><\/pre>\n<p>&nbsp;\u041d\u0438\u0436\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d \u0432\u044b\u0432\u043e\u0434 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b:<\/p>\n<pre><code class=\"java\">Assembling chassis of the sports model Assembling body of the sports model Painting body of the sports model Setting up interior of the sports model Below car delievered:  ====================================================================== Car [chassis=Sporty Chassis, body=Sporty Body, paint=Sporty Torch Red Paint, interior=Sporty interior] ======================================================================<\/code><\/pre>\n<p>&nbsp;\u042f \u043d\u0430\u0434\u0435\u044e\u0441\u044c, \u0447\u0442\u043e \u0432\u044b \u0445\u043e\u0440\u043e\u0448\u043e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c \u0432 \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0438 \u0438 \u043f\u0440\u0438\u043c\u0435\u0440\u0435, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043d\u044f\u0442\u044c \u043f\u0430\u0442\u0442\u0435\u0440\u043d <code>Builder<\/code>. \u041d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0437 \u043d\u0430\u0441 \u0442\u0430\u043a\u0436\u0435 \u043d\u0430\u0445\u043e\u0434\u044f\u0442 \u0443 \u043d\u0435\u0433\u043e \u0441\u0445\u043e\u0434\u0441\u0442\u0432\u043e \u0441 <a href=\"https:\/\/dzone.com\/articles\/abstract-factory-pattern-in-java\"><strong>\u043f\u0430\u0442\u0442\u0435\u0440\u043d\u043e\u043c \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u043e\u0439 \u0444\u0430\u0431\u0440\u0438\u043a\u0438 (Abstract Factory)<\/strong><\/a>, \u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u044f \u0440\u0430\u0441\u0441\u043a\u0430\u0437\u044b\u0432\u0430\u043b \u0432 \u0434\u0440\u0443\u0433\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435. \u041e\u0441\u043d\u043e\u0432\u043d\u043e\u0435 \u0440\u0430\u0437\u043b\u0438\u0447\u0438\u0435 \u043c\u0435\u0436\u0434\u0443 \u0441\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u0435\u043c \u0438 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u043e\u0439 \u0444\u0430\u0431\u0440\u0438\u043a\u043e\u0439 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e \u0441\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u044c \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043d\u0430\u043c \u0431\u043e\u043b\u044c\u0448\u0438\u0439 \u0438\u043b\u0438 \u043b\u0443\u0447\u0448\u0438\u0439 \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u043d\u0430\u0434 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u043c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430. \u0415\u0441\u043b\u0438 \u0432\u043a\u0440\u0430\u0442\u0446\u0435, \u0442\u043e \u043f\u0430\u0442\u0442\u0435\u0440\u043d \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u043e\u0439 \u0444\u0430\u0431\u0440\u0438\u043a\u0438 \u043e\u0442\u0432\u0435\u0447\u0430\u0435\u0442 \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441 \u00ab\u0447\u0442\u043e\u00bb, \u0430 \u043f\u0430\u0442\u0442\u0435\u0440\u043d \u0441\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u044c &#8212; \u00ab\u043a\u0430\u043a\u00bb.<\/p>\n<p>&nbsp;\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0437\u0434\u0435\u0441\u044c: <a href=\"https:\/\/github.com\/BrijeshSaxena\/design-pattern-real-builder\">Real-Builder-Design-Pattern-Source-Code<\/a><\/p>\n<p>\u042f \u043d\u0430\u0448\u0435\u043b \u043f\u0430\u0442\u0442\u0435\u0440\u043d <code>Builder<\/code> \u043d\u0435\u0432\u0435\u0440\u043e\u044f\u0442\u043d\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u043c \u0438 \u043e\u0434\u043d\u0438\u043c \u0438\u0437 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c\u044b\u0445 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f\u0445 \u0432 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f. \u042f \u043f\u0440\u0438\u0448\u0435\u043b \u043a \u0432\u044b\u0432\u043e\u0434\u0443, \u0447\u0442\u043e <code>Builder<\/code> \u043b\u0443\u0447\u0448\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442 \u0434\u043b\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u0441 \u0438\u043c\u043c\u0443\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438. \u0412\u0441\u0435 \u043c\u044b \u0437\u043d\u0430\u0435\u043c, \u043a\u0430\u043a \u043c\u043d\u043e\u0433\u043e \u0435\u0441\u0442\u044c \u0445\u043e\u0440\u043e\u0448\u0438\u0445 \u0438\u043c\u043c\u0443\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u0438 \u0438\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u0443\u0432\u0435\u043b\u0438\u0447\u0438\u0432\u0430\u0435\u0442\u0441\u044f \u0434\u0435\u043d\u044c \u043e\u0442\u043e \u0434\u043d\u044f, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u043f\u043e\u0441\u043b\u0435 \u0440\u0435\u043b\u0438\u0437\u0430 Java 8.<\/p>\n<p>\u042f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e <code>Builder<\/code> \u0434\u043b\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u0441\u0432\u043e\u0438\u0445 \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u0438\u043c\u043c\u0443\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u044b\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432, \u0438 \u044f \u0431\u044b \u0445\u043e\u0442\u0435\u043b \u043f\u0440\u043e\u0434\u0435\u043c\u043e\u043d\u0441\u0442\u0440\u0438\u043e\u0432\u0430\u0442\u044c \u0437\u0434\u0435\u0441\u044c \u044d\u0442\u0443 \u0438\u0434\u0435\u044e.<\/p>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043a\u043b\u0430\u0441\u0441 <code>Employee<\/code>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u043b\u0435\u0439.<\/p>\n<pre><code class=\"java\">public class Employee {      private int empNo;     private String name;     private String depttName;     private int salary;     private int mgrEmpNo;     private String projectName; }<\/code><\/pre>\n<p>&nbsp;\u041f\u0440\u0435\u0434\u043f\u043e\u043b\u043e\u0436\u0438\u043c, \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0432\u0430 \u043f\u043e\u043b\u044f <code>EmpNo<\/code> \u0438 <code>EmpName<\/code> \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438, \u0430 \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 &#8212; \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u044b\u0435. \u041f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u044d\u0442\u043e \u0438\u043c\u043c\u0443\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441, \u0443 \u043c\u0435\u043d\u044f \u0435\u0441\u0442\u044c \u0434\u0432\u0430 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u043d\u0438\u044f \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u043e\u0432.<\/p>\n<ol>\n<li>\n<p>\u041d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u0441 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c\u0438 \u043f\u043e\u0434 \u0432\u0441\u0435 \u043f\u043e\u043b\u044f.<\/p>\n<\/li>\n<li>\n<p>\u041d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u043e\u0432 \u0434\u043b\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u043a\u043e\u043c\u0431\u0438\u043d\u0430\u0446\u0438\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430 <code>Employee<\/code>.<\/p>\n<\/li>\n<\/ol>\n<p>\u042f \u0440\u0435\u0448\u0438\u043b, \u0447\u0442\u043e \u043f\u0435\u0440\u0432\u044b\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u043c\u043d\u0435 \u043d\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0438\u0442, \u0442\u0430\u043a \u043a\u0430\u043a \u043c\u043d\u0435 \u043d\u0435 \u043d\u0440\u0430\u0432\u0438\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u0432 \u043c\u0435\u0442\u043e\u0434\u0435 \u0431\u043e\u043b\u044c\u0448\u0435 \u0442\u0440\u0435\u0445-\u0447\u0435\u0442\u044b\u0440\u0435\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432. \u042d\u0442\u043e \u0432\u044b\u0433\u043b\u044f\u0434\u0438\u0442 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448\u043e \u0438 \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0435\u0449\u0435 \u0445\u0443\u0436\u0435, \u043a\u043e\u0433\u0434\u0430 \u043c\u043d\u043e\u0433\u0438\u0435 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b \u0440\u0430\u0432\u043d\u044b \u043d\u0443\u043b\u044e \u0438\u043b\u0438 <code>null<\/code>.<\/p>\n<pre><code class=\"java\">Employee emp1 = new Employee (100, \"Brijesh\", null, 0, 0, \"Builder Pattern\");<\/code><\/pre>\n<p>&nbsp;\u0412\u0442\u043e\u0440\u043e\u0439 \u0432\u0430\u0440\u0438\u0430\u043d\u0442 \u0442\u043e\u0436\u0435 \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u0445\u043e\u0440\u043e\u0448, \u0442\u0430\u043a \u043a\u0430\u043a \u043c\u044b \u0441\u043e\u0437\u0434\u0430\u0435\u043c \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u043c\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u043e\u0432.<\/p>\n<pre><code class=\"java\">  public Employee(int empNo, String name) {         super();         if (empNo &lt;= 0) {             throw new IllegalArgumentException(\"Please provide valid employee number.\");         }         if (name == null || name.trim().isEmpty()) {             throw new IllegalArgumentException(\"Please provide employee name.\");         }         this.empNo = empNo;         this.name = name;     }      public Employee(int empNo, String name, String depttName) {         this(empNo, name);         this.depttName = depttName;     }      public Employee(int empNo, String name, String depttName, int salary) {         this(empNo, name, depttName);         this.salary = salary;     }      public Employee(int empNo, String name, String depttName, int salary, int mgrEmpNo) {         this(empNo, name, depttName, salary);         this.mgrEmpNo = mgrEmpNo;     }      public Employee(int empNo, String name, String depttName, int salary, int mgrEmpNo, String projectName) {         this(empNo, name, depttName, salary, mgrEmpNo);         this.projectName = projectName;     }<\/code><\/pre>\n<p>&nbsp;\u0418\u0442\u0430\u043a, \u0432\u043e\u0442 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u0430 <code>Builder<\/code>:<\/p>\n<pre><code class=\"java\">package org.trishinfotech.builder.example;  public class Employee {      private int empNo;     private String name;     private String depttName;     private int salary;     private int mgrEmpNo;     private String projectName;      public Employee(EmployeeBuilder employeeBuilder) {         if (employeeBuilder == null) {             throw new IllegalArgumentException(\"Please provide employee builder to build employee object.\");         }         if (employeeBuilder.empNo &lt;= 0) {             throw new IllegalArgumentException(\"Please provide valid employee number.\");         }         if (employeeBuilder.name == null || employeeBuilder.name.trim().isEmpty()) {             throw new IllegalArgumentException(\"Please provide employee name.\");         }         this.empNo = employeeBuilder.empNo;         this.name = employeeBuilder.name;         this.depttName = employeeBuilder.depttName;         this.salary = employeeBuilder.salary;         this.mgrEmpNo = employeeBuilder.mgrEmpNo;         this.projectName = employeeBuilder.projectName;     }      public int getEmpNo() {         return empNo;     }      public String getName() {         return name;     }          public String getDepttName() {         return depttName;     }      public int getSalary() {         return salary;     }      public int getMgrEmpNo() {         return mgrEmpNo;     }          public String getProjectName() {         return projectName;     }      @Override     public String toString() {         \/\/ \u041a\u043b\u0430\u0441\u0441 StringBuilder \u0442\u0430\u043a\u0436\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442 \u043f\u0430\u0442\u0442\u0435\u0440\u043d \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f Builder \u0441 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439         \/\/ \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 java.lang.Appendable         StringBuilder builder = new StringBuilder();         builder.append(\"Employee [empNo=\").append(empNo).append(\", name=\").append(name).append(\", depttName=\")                 .append(depttName).append(\", salary=\").append(salary).append(\", mgrEmpNo=\").append(mgrEmpNo)                 .append(\", projectName=\").append(projectName).append(\"]\");         return builder.toString();     }      public static class EmployeeBuilder {         private int empNo;         protected String name;         protected String depttName;         protected int salary;         protected int mgrEmpNo;         protected String projectName;          public EmployeeBuilder() {             super();         }                  public EmployeeBuilder empNo(int empNo) {             this.empNo = empNo;             return this;         }          public EmployeeBuilder name(String name) {             this.name = name;             return this;         }          public EmployeeBuilder depttName(String depttName) {             this.depttName = depttName;             return this;         }          public EmployeeBuilder salary(int salary) {             this.salary = salary;             return this;         }          public EmployeeBuilder mgrEmpNo(int mgrEmpNo) {             this.mgrEmpNo = mgrEmpNo;             return this;         }         public EmployeeBuilder projectName(String projectName) {             this.projectName = projectName;             return this;         }          public Employee build() {             Employee emp = null;             if (validateEmployee()) {                 emp = new Employee(this);             } else {                 System.out.println(\"Sorry! Employee objects can't be build without required details\");             }             return emp;         }          private boolean validateEmployee() {            return (empNo &gt; 0 &amp;&amp; name != null &amp;&amp; !name.trim().isEmpty());         }     } }<\/code><\/pre>\n<p>\u042f \u043d\u0430\u043f\u0438\u0441\u0430\u043b <code>EmployeeBuilder<\/code> \u043a\u0430\u043a \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u0432\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441. \u0412\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0435\u0433\u043e \u043a\u0430\u043a \u043e\u0431\u044b\u0447\u043d\u044b\u0439 \u043f\u0443\u0431\u043b\u0438\u0447\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u0432 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u043c \u0444\u0430\u0439\u043b Java. \u0411\u043e\u043b\u044c\u0448\u043e\u0439 \u0440\u0430\u0437\u043d\u0438\u0446\u044b \u044f \u043d\u0435 \u0432\u0438\u0436\u0443.<\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0443 <code>EmployeeMain<\/code> \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430 <code>Employee<\/code>:<\/p>\n<pre><code class=\"java\">package org.trishinfotech.builder.example;  public class EmployeeMain {      public static void main(String[] args) {         Employee emp1 = new Employee.EmployeeBuilder().empNo(100).name(\"Brijesh\").projectName(\"Builder Pattern\")                 .build();         System.out.println(emp1);     } }<\/code><\/pre>\n<p>\u041d\u0430\u0434\u0435\u044e\u0441\u044c, \u0432\u0430\u043c \u043f\u043e\u043d\u0440\u0430\u0432\u0438\u043b\u0430\u0441\u044c \u0438\u0434\u0435\u044f. \u041c\u044b \u043c\u043e\u0436\u0435\u043c \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e \u043f\u0440\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0431\u043e\u043b\u0435\u0435 \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432. \u042f \u043d\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b \u0437\u0434\u0435\u0441\u044c \u0440\u0430\u0441\u043f\u043e\u0440\u044f\u0434\u0438\u0442\u0435\u043b\u044f (<strong>Director<\/strong>), \u0442\u0430\u043a \u043a\u0430\u043a \u0432\u0441\u0435 \u0448\u0430\u0433\u0438 (\u0441\u0431\u043e\u0440 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439 \u0434\u043b\u044f \u043f\u043e\u043b\u0435\u0439) \u043d\u0435 \u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u043c\u0438 \u0438 \u043c\u043e\u0433\u0443\u0442 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u0432 \u043b\u044e\u0431\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435. \u0427\u0442\u043e\u0431\u044b \u0443\u0431\u0435\u0434\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u044f \u0441\u043e\u0437\u0434\u0430\u044e \u043e\u0431\u044a\u0435\u043a\u0442 <code>Employee<\/code> \u0442\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0441\u043b\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u043f\u043e\u043b\u0435\u0439, \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b<strong> \u043c\u0435\u0442\u043e\u0434 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0438<\/strong>.<\/p>\n<h3>\u041f\u0440\u0438\u043c\u0435\u0440 \u0441 \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u0438\u0435\u043c \u0437\u0430\u043a\u0430\u0437\u0430 \u0432 \u0440\u0435\u0441\u0442\u043e\u0440\u0430\u043d\u0435 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u0430 Builder<\/h3>\n<p>\u042f \u0445\u043e\u0447\u0443 \u0435\u0449\u0435 \u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c \u0432\u0430\u043c \u043f\u0440\u0438\u043c\u0435\u0440 \u043a\u043e\u0434\u0430 \u0434\u043b\u044f \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u0438\u044f \u0437\u0430\u043a\u0430\u0437\u0430 \u0432 \u0440\u0435\u0441\u0442\u043e\u0440\u0430\u043d\u0435, \u0433\u0434\u0435 Order (\u0437\u0430\u043a\u0430\u0437) \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u0438\u043c\u043c\u0443\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u044b\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c \u0438 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u0442\u0438\u043f \u043e\u0431\u0441\u043b\u0443\u0436\u0438\u0432\u0430\u043d\u0438\u044f \u0437\u0430\u043a\u0430\u0437\u0430 &#8212; Order Service Type (Take Away &#8212; \u0441 \u0441\u043e\u0431\u043e\u0439\/Eat Here &#8212; \u0432 \u0437\u0430\u0432\u0435\u0434\u0435\u043d\u0438\u0438), \u0432\u0441\u0435\u0445 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0445 \u043d\u0430\u043c \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432 \u043f\u0438\u0442\u0430\u043d\u0438\u044f (Food Items) \u0438 \u0438\u043c\u0435\u043d\u0438 \u043a\u043b\u0438\u0435\u043d\u0442\u0430 (Customer Name &#8212; \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e) \u0432 \u0432\u0440\u0435\u043c\u044f \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u0438\u044f \u0437\u0430\u043a\u0430\u0437\u0430. \u041f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432 \u043f\u0438\u0442\u0430\u043d\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0443\u0433\u043e\u0434\u043d\u043e. \u0418\u0442\u0430\u043a, \u0432\u043e\u0442 \u043a\u043e\u0434 \u044d\u0442\u043e\u0433\u043e \u043f\u0440\u0438\u043c\u0435\u0440\u0430.<\/p>\n<p>\u041a\u043e\u0434 \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f <code>OrderService<\/code>:<\/p>\n<pre><code class=\"java\">package org.trishinfotech.builder;  public enum OrderService {      TAKE_AWAY(\"Take Away\", 2.0d), EAT_HERE(\"Eat Here\", 5.5d);      private String name;     private double tax;      OrderService(String name, double tax) {         this.name = name;         this.tax = tax;     }      public String getName() {         return name;     }      public double getTax() {         return tax;     }  }<\/code><\/pre>\n<p>&nbsp;\u041a\u043e\u0434 \u0434\u043b\u044f \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 <code>FoodItem<\/code>:<\/p>\n<pre><code class=\"java\">package org.trishinfotech.builder.meal;  import org.trishinfotech.builder.packing.Packing;  public interface FoodItem {      public String name();      public int calories();      public Packing packing();      public double price(); }<\/code><\/pre>\n<p>&nbsp;\u041a\u043e\u0434 \u0434\u043b\u044f \u043a\u043b\u0430\u0441\u0441\u0430 <code>Meal<\/code> (\u0431\u043b\u044e\u0434\u043e). \u041a\u043b\u0430\u0441\u0441 <code>Meal<\/code> \u043f\u0440\u0435\u0434\u043b\u0430\u0433\u0430\u0435\u0442 \u0437\u0430\u0440\u0430\u043d\u0435\u0435 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u044b\u0435 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u044b \u043f\u0438\u0442\u0430\u043d\u0438\u044f \u0441\u043e \u0441\u043a\u0438\u0434\u043a\u043e\u0439 \u043d\u0430 \u0446\u0435\u043d\u0443 \u0442\u043e\u0432\u0430\u0440\u0430 (\u043d\u0435 \u043d\u0430 \u0446\u0435\u043d\u0443 \u0443\u043f\u0430\u043a\u043e\u0432\u043a\u0438).<\/p>\n<pre><code class=\"java\">package org.trishinfotech.builder.meal;  import java.util.ArrayList; import java.util.List; import java.util.Objects; import java.util.stream.Collectors;  import org.trishinfotech.builder.packing.MultiPack; import org.trishinfotech.builder.packing.Packing;  public class Meal implements FoodItem {      private List&lt;FoodItem&gt; foodItems = new ArrayList&lt;FoodItem&gt;();     private String mealName;     private double discount;      public Meal(String mealName, List&lt;FoodItem&gt; foodItems, double discount) {         super();         if (Objects.isNull(foodItems) || foodItems.stream().filter(Objects::nonNull).collect(Collectors.toList()).isEmpty()) {             throw new IllegalArgumentException(                     \"Meal can't be order without any food item\");         }         this.mealName = mealName;         this.foodItems = new ArrayList&lt;FoodItem&gt;(foodItems);         this.discount = discount;     }      public List&lt;FoodItem&gt; getFoodItems() {         return foodItems;     }      @Override     public String name() {         return mealName;     }        @Override     public int calories() {         int totalCalories = foodItems.stream().mapToInt(foodItem -&gt; foodItem.calories()).sum();         return totalCalories;     }      @Override     public Packing packing() {         double packingPrice = foodItems.stream().map(foodItem -&gt; foodItem.packing())                 .mapToDouble(packing -&gt; packing.packingPrice()).sum();         return new MultiPack(packingPrice);     }      @Override     public double price() {         double totalPrice = foodItems.stream().mapToDouble(foodItem -&gt; foodItem.price()).sum();         return totalPrice;     }      public double discount() {         return discount;     } }<\/code><\/pre>\n<h3>\u0415\u0434\u0430:<\/h3>\n<p>\u041a\u043e\u0434 \u0434\u043b\u044f \u043a\u043b\u0430\u0441\u0441\u0430 <code>Burger<\/code>:<\/p>\n<pre><code class=\"java\">package org.trishinfotech.builder.food.burger;  import org.trishinfotech.builder.meal.FoodItem; import org.trishinfotech.builder.packing.Packing; import org.trishinfotech.builder.packing.Wrap;  public abstract class Burger implements FoodItem {      @Override     public Packing packing() {         return new Wrap();     }  }<\/code><\/pre>\n<p>\u041a\u043e\u0434 \u0434\u043b\u044f \u043a\u043b\u0430\u0441\u0441\u0430 <code>ChickenBurger<\/code>:<\/p>\n<pre><code class=\"java\">package org.trishinfotech.builder.food.burger;  public class ChickenBurger extends Burger {      @Override     public String name() {         return \"Chicken Burger\";     }      @Override     public int calories() {         return 300;     }      @Override     public double price() {         return 4.5d;     }  }<\/code><\/pre>\n<p>\u041a\u043e\u0434 \u0434\u043b\u044f \u043a\u043b\u0430\u0441\u0441\u0430 <code>VegBurger<\/code> (\u0432\u0435\u0433\u0430\u043d\u0441\u043a\u0438\u0439 \u0431\u0443\u0440\u0433\u0435\u0440):<\/p>\n<pre><code class=\"java\">package org.trishinfotech.builder.food.burger;  public class VegBurger extends Burger {      @Override     public String name() {         return \"Veg Burger\";     }      @Override     public int calories() {         return 180;     }      @Override     public double price() {         return 2.7d;     }  }<\/code><\/pre>\n<p>\u041a\u043e\u0434 \u0434\u043b\u044f \u043a\u043b\u0430\u0441\u0441\u0430 <code>Nuggets<\/code>:<\/p>\n<pre><code class=\"java\">package org.trishinfotech.builder.food.nuggets;  import org.trishinfotech.builder.meal.FoodItem; import org.trishinfotech.builder.packing.Container; import org.trishinfotech.builder.packing.Packing;  public abstract class Nuggets implements FoodItem {      @Override     public Packing packing() {         return new Container();     }  }<\/code><\/pre>\n<p>&nbsp;\u041a\u043e\u0434 \u0434\u043b\u044f \u043a\u043b\u0430\u0441\u0441\u0430 <code>CheeseNuggets<\/code>:<\/p>\n<pre><code class=\"java\">package org.trishinfotech.builder.food.nuggets;  public class CheeseNuggets extends Nuggets {      @Override     public String name() {         return \"Cheese Nuggets\";     }      @Override     public int calories() {         return 330;     }      @Override     public double price() {         return 3.8d;     }  }<\/code><\/pre>\n<p>\u041a\u043e\u0434 \u0434\u043b\u044f \u043a\u043b\u0430\u0441\u0441\u0430 <code>ChickenNuggets<\/code>:<\/p>\n<pre><code class=\"java\">package org.trishinfotech.builder.food.nuggets;  public class ChickenNuggets extends Nuggets {      @Override     public String name() {         return \"Chicken Nuggets\";     }      @Override     public int calories() {         return 450;     }      @Override     public double price() {         return 5.0d;     }  }<\/code><\/pre>\n<h3>\u041d\u0430\u043f\u0438\u0442\u043a\u0438:<\/h3>\n<p>\u041d\u0430\u043f\u0438\u0442\u043a\u0438 \u0431\u044b\u0432\u0430\u044e\u0442 \u0440\u0430\u0437\u043d\u044b\u0445 \u0440\u0430\u0437\u043c\u0435\u0440\u043e\u0432. \u0418\u0442\u0430\u043a, \u0432\u043e\u0442 \u043a\u043e\u0434 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u0438\u044f <code>BeverageSize<\/code>:<\/p>\n<pre><code class=\"java\">package org.trishinfotech.builder.beverages;  public enum BeverageSize {     XS(\"Extra Small\", 110), S(\"Small\", 150), M(\"Medium\", 210), L(\"Large\", 290);     private String name;     private int calories;      BeverageSize(String name, int calories) {         this.name = name;         this.calories = calories;     }        public String getName() {         return name;     }      public int getCalories() {         return calories;     }  }<\/code><\/pre>\n<p>\u041a\u043e\u0434 \u0434\u043b\u044f \u043a\u043b\u0430\u0441\u0441\u0430 <code>Drink<\/code>:<\/p>\n<pre><code class=\"java\">package org.trishinfotech.builder.beverages;  import org.trishinfotech.builder.meal.FoodItem;  public abstract class Drink implements FoodItem {      protected BeverageSize size;      public Drink(BeverageSize size) {         super();         this.size = size;         if (this.size == null) {             this.size = BeverageSize.M;         }     }      public BeverageSize getSize() {         return size;     }      public String drinkDetails() {         return \" (\" + size + \")\";     } }<\/code><\/pre>\n<p>&nbsp;\u041a\u043e\u0434 \u0434\u043b\u044f \u043a\u043b\u0430\u0441\u0441\u0430 <code>ColdDrink<\/code>:<\/p>\n<pre><code class=\"java\">package org.trishinfotech.builder.beverages.cold;  import org.trishinfotech.builder.beverages.BeverageSize; import org.trishinfotech.builder.beverages.Drink; import org.trishinfotech.builder.packing.Bottle; import org.trishinfotech.builder.packing.Packing;  public abstract class ColdDrink extends Drink {      public ColdDrink(BeverageSize size) {         super(size);     }      @Override public Packing packing() {         return new Bottle();     } }<\/code><\/pre>\n<p>&nbsp;\u041a\u043e\u0434 \u0434\u043b\u044f \u043a\u043b\u0430\u0441\u0441\u0430 <code>CocaCola<\/code>:<\/p>\n<pre><code class=\"java\">package org.trishinfotech.builder.beverages.cold;  import org.trishinfotech.builder.beverages.BeverageSize;  public class CocaCola extends ColdDrink {      public CocaCola(BeverageSize size) {         super(size);     }      @Override     public String name() {         return \"Coca-Cola\" + drinkDetails();     }      @Override     public int calories() {         if (size != null) {             switch (size) {             case XS:                 return 110;             case S:                 return 150;             case M:                 return 210;             case L:                 return 290;             default:                 break;             }         }         return 0;     }      @Override     public double price() {         if (size != null) {             switch (size) {             case XS:                 return 0.80d;             case S:                 return 1.0d;             case M:                 return 1.5d;             case L:                 return 2.0d;             default:                 break;             }         }         return 0.0d;     }  }<\/code><\/pre>\n<p>\u041a\u043e\u0434 \u0434\u043b\u044f \u043a\u043b\u0430\u0441\u0441\u0430 <code>Pepsi<\/code>:<\/p>\n<pre><code class=\"java\">package org.trishinfotech.builder.beverages.cold;  import org.trishinfotech.builder.beverages.BeverageSize;  public class Pepsi extends ColdDrink {      public Pepsi(BeverageSize size) {         super(size);     }      @Override public String name() {         return \"Pepsi\" + drinkDetails();     }      @Override public int calories() {         if (size != null) {             switch (size) {                 case S:                     return 160;                 case M:                     return 220;                 case L:                     return 300;                 default:                     break;             }         }         return 0;     }      @Override public double price() {         if (size != null) {             switch (size) {                 case S:                     return 1.2d;                 case M:                     return 2.2d;                 case L:                     return 2.7d;                 default:                     break;             }         }         return 0.0d;     }  }<\/code><\/pre>\n<p>&nbsp;\u041a\u043e\u0434 \u0434\u043b\u044f \u043a\u043b\u0430\u0441\u0441\u0430 <code>HotDrink<\/code>:<\/p>\n<pre><code class=\"java\">package org.trishinfotech.builder.beverages.hot;  import org.trishinfotech.builder.beverages.BeverageSize; import org.trishinfotech.builder.beverages.Drink; import org.trishinfotech.builder.packing.Packing; import org.trishinfotech.builder.packing.SipperMug;  public abstract class HotDrink extends Drink {      public HotDrink(BeverageSize size) {         super(size);     }          @Override public Packing packing() {         return new SipperMug();     } }<\/code><\/pre>\n<p>\u041a\u043e\u0434 \u0434\u043b\u044f \u043a\u043b\u0430\u0441\u0441\u0430 <code>Cuppuccinno<\/code>:<\/p>\n<pre><code class=\"java\">package org.trishinfotech.builder.beverages.hot;  import org.trishinfotech.builder.beverages.BeverageSize;  public class Cappuccino extends HotDrink {      public Cappuccino(BeverageSize size) {         super(size);     }      @Override public String name() {         return \"Cappuccino\" + drinkDetails();     }        @Override public int calories() {         if (size != null) {             switch (size) {                 case S:                     return 120;                 case M:                     return 160;                 case L:                     return 210;                 default:                 break;             }         }         return 0;     }      @Override public double price() {         if (size != null) {             switch (size) {                 case S:                     return 1.0d;                 case M:                     return 1.4d;                 case L:                     return 1.8d;                 default:                 break;             }         }         return 0.0d;     }  }<\/code><\/pre>\n<p>\u041a\u043e\u0434 \u0434\u043b\u044f \u043a\u043b\u0430\u0441\u0441\u0430 <code>HotChocolate<\/code>:<\/p>\n<pre><code class=\"java\">package org.trishinfotech.builder.beverages.hot;  import org.trishinfotech.builder.beverages.BeverageSize;  public class HotChocolate extends HotDrink {      public HotChocolate(BeverageSize size) {         super(size);     }      @Override public String name() {         return \"Hot Chocolate\" + drinkDetails();     }        @Override public int calories() {         if (size != null) {             switch (size) {                 case S:                     return 370;                 case M:                     return 450;                 case L:                     return 560;                 default:                     break;             }         }         return 0;     }          @Override public double price() {         if (size != null) {             switch (size) {                 case S:                     return 1.6d;                 case M:                     return 2.3d;                 case L:                     return 3.0d;                 default:                     break;             }                   }         return 0.0d;     }  }<\/code><\/pre>\n<h3>\u0423\u043f\u0430\u043a\u043e\u0432\u043a\u0430:<\/h3>\n<p>\u041a\u043e\u0434 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 <code>Packing<\/code>:<\/p>\n<pre><code class=\"java\">package org.trishinfotech.builder.packing;  public interface Packing {      public String pack();      public double packingPrice(); }<\/code><\/pre>\n<p>\u041a\u043e\u0434 \u0434\u043b\u044f \u043a\u043b\u0430\u0441\u0441\u0430 <code>Bottle<\/code>:<\/p>\n<pre><code class=\"java\">package org.trishinfotech.builder.packing;  public class Bottle implements Packing {      @Override     public String pack() {         return \"Bottle\";     }      @Override     public double packingPrice() {         return 0.75d;     }  }<\/code><\/pre>\n<p>\u041a\u043e\u0434 \u0434\u043b\u044f \u043a\u043b\u0430\u0441\u0441\u0430 <code>Container<\/code>:<\/p>\n<pre><code class=\"java\">package org.trishinfotech.builder.packing;  public class Container implements Packing {      @Override     public String pack() {         return \"Container\";     }      @Override     public double packingPrice() {         return 1.25d;     }  }<\/code><\/pre>\n<p>\u041a\u043e\u0434 \u0434\u043b\u044f \u043a\u043b\u0430\u0441\u0441\u0430 <code>MultiPack<\/code>. \u0423\u043f\u0430\u043a\u043e\u0432\u043a\u0430 <code>MutiPack<\/code> \u0441\u043b\u0443\u0436\u0438\u0442 \u0432\u0441\u043f\u043e\u043c\u043e\u0433\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0443\u043f\u0430\u043a\u043e\u0432\u043a\u043e\u0439 \u0434\u043b\u044f \u0435\u0434\u044b, \u043a\u043e\u0433\u0434\u0430 \u043c\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u043c \u0440\u0430\u0437\u043d\u044b\u0435 \u0443\u043f\u0430\u043a\u043e\u0432\u043a\u0438 \u0434\u043b\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u0432.<\/p>\n<pre><code class=\"java\">package org.trishinfotech.builder.packing;  public class MultiPack implements Packing {      private double packingPrice;       public MultiPack(double packingPrice) {         super();         this.packingPrice = packingPrice;     }        @Override     public String pack() {         return \"Multi-Pack\";     }      @Override     public double packingPrice() {         return packingPrice;     }  }<\/code><\/pre>\n<p>\u041a\u043e\u0434 \u0434\u043b\u044f \u043a\u043b\u0430\u0441\u0441\u0430 <code>SipperMug<\/code>:<\/p>\n<pre><code class=\"java\">package org.trishinfotech.builder.packing;  public class SipperMug implements Packing {      @Override     public String pack() {         return \"Sipper Mug\";     }      @Override     public double packingPrice() {         return 1.6d;     }  }<\/code><\/pre>\n<p>\u041a\u043e\u0434 \u0434\u043b\u044f \u043a\u043b\u0430\u0441\u0441\u0430 <code>Wrap<\/code>:<\/p>\n<pre><code class=\"java\">package org.trishinfotech.builder.packing;  public class Wrap implements Packing {      @Override     public String pack() {         return \"Wrap\";     }      @Override     public double packingPrice() {         return 0.40d;     }  }<\/code><\/pre>\n<p>\u041a\u043e\u0434 \u0441\u043b\u0443\u0436\u0435\u0431\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 <code>BillPrinter<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u044f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u0434\u043b\u044f \u043f\u0435\u0447\u0430\u0442\u0438 \u0434\u0435\u0442\u0430\u043b\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0441\u0447\u0435\u0442\u0430.<\/p>\n<pre><code class=\"java\">package org.trishinfotech.builder.util;  import java.time.LocalDateTime; import java.time.format.DateTimeFormatter; import java.util.concurrent.atomic.DoubleAdder;  import org.trishinfotech.builder.Order; import org.trishinfotech.builder.OrderService; import org.trishinfotech.builder.meal.Meal; import org.trishinfotech.builder.packing.Packing;  public class BillPrinter {      static DateTimeFormatter dtf = DateTimeFormatter.ofPattern(\"yyyy\/MM\/dd HH:mm:ss\");      public static void printItemisedBill(Order order) {         OrderService service = order.getService();         System.out.printf(\"%60s\\n\", \"Food Court\");         System.out.println(\"=================================================================================================================\");         System.out.printf(\"Service: %10s (%2.2f Tax)                                                         Customer Name: %-20s\\n\", service.getName(), service.getTax(), order.getCustomerName());         System.out.println(\"-----------------------------------------------------------------------------------------------------------------\");         System.out.printf(\"%25s | %10s | %10s | %10s | %15s | %10s | %10s\\n\", \"Food Item\", \"Calories\", \"Packing\", \"Price\", \"Packing Price\", \"Discount %\", \"Total Price\");         System.out.println(\"-----------------------------------------------------------------------------------------------------------------\");         DoubleAdder itemTotalPrice = new DoubleAdder();         order.getFoodItems().stream().forEach(item -&gt; {             String name = item.name();             int calories = item.calories();             Packing packing = item.packing();             double price = item.price();             double packingPrice = packing.packingPrice();             double discount = item instanceof Meal? ((Meal)item).discount() : 0.0d;             double totalItemPrice = calculateTotalItemPrice(price, packingPrice, discount);             System.out.printf(\"%25s | %10d | %10s | %10.2f | %15.2f | %10.2f | %10.2f\\n\", name, calories, packing.pack(), price, packing.packingPrice(), discount, totalItemPrice);             itemTotalPrice.add(totalItemPrice);         });         System.out.println(\"=================================================================================================================\");         double billTotal = itemTotalPrice.doubleValue();         billTotal = applyTaxes(billTotal, service);         System.out.printf(\"Date: %-30s %66s %.2f\\n\", dtf.format(LocalDateTime.now()), \"Total Bill (incl. taxes):\", billTotal);         System.out.println(\"Enjoy your meal!\\n\\n\\n\\n\");     }      private static double applyTaxes(double billTotal, OrderService service) {         return billTotal + (billTotal * service.getTax())\/100;     }      private static double calculateTotalItemPrice(double price, double packingPrice, double discount) {         if (discount &gt; 0.0d) {             price = price - (price * discount)\/100;         }         return price + packingPrice;     } }<\/code><\/pre>\n<p>\u041f\u043e\u0447\u0442\u0438 \u0432\u0441\u0435 \u0433\u043e\u0442\u043e\u0432\u043e. \u041f\u0440\u0438\u0448\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u043d\u0430\u0448 \u0438\u043c\u043c\u0443\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 <code>Order<\/code>:<\/p>\n<pre><code class=\"java\">package org.trishinfotech.builder;  import java.util.ArrayList; import java.util.List; import java.util.Objects; import java.util.stream.Collectors;  import org.trishinfotech.builder.meal.FoodItem;  public class Order {      private List&lt;FoodItem&gt; foodItems = new ArrayList&lt;FoodItem&gt;();      private String customerName;     private OrderService service;      public Order(OrderService service, List&lt;FoodItem&gt; foodItems, String customerName) {         super();         if (Objects.isNull(service)) {             throw new IllegalArgumentException(                     \"Meal can't be order without selecting service 'Take Away' or 'Eat Here'\");         }         if (Objects.isNull(foodItems) || foodItems.stream().filter(Objects::nonNull).collect(Collectors.toList()).isEmpty()) {             throw new IllegalArgumentException(                     \"Meal can't be order without any food item\");         }         this.service = service;         this.foodItems = new ArrayList&lt;FoodItem&gt;(foodItems);         this.customerName = customerName;         if (this.customerName == null) {             this.customerName = \"NO NAME\";         }     }      public List&lt;FoodItem&gt; getFoodItems() {         return foodItems;     }      public String getCustomerName() {         return customerName;     }      public OrderService getService() {         return service;     }  }<\/code><\/pre>\n<p>\u0410 \u0432\u043e\u0442 \u043a\u043e\u0434 \u0434\u043b\u044f <code>OrderBuilder<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u0438\u0440\u0443\u0435\u0442 \u043e\u0431\u044a\u0435\u043a\u0442 <code>Order<\/code>.<\/p>\n<pre><code class=\"java\">package org.trishinfotech.builder;  import java.util.ArrayList; import java.util.List;  import org.trishinfotech.builder.beverages.BeverageSize; import org.trishinfotech.builder.beverages.cold.CocaCola; import org.trishinfotech.builder.beverages.cold.Pepsi; import org.trishinfotech.builder.food.burger.ChickenBurger; import org.trishinfotech.builder.food.burger.VegBurger; import org.trishinfotech.builder.food.nuggets.CheeseNuggets; import org.trishinfotech.builder.food.nuggets.ChickenNuggets; import org.trishinfotech.builder.meal.FoodItem; import org.trishinfotech.builder.meal.Meal;  public class OrderBuilder {      protected static final double HAPPY_MENU_DISCOUNT = 5.0d;      private String customerName;      private OrderService service = OrderService.TAKE_AWAY;      private List&lt;FoodItem&gt; items = new ArrayList&lt;FoodItem&gt;();      public OrderBuilder() {         super();     }        \/\/ \u0421\u0435\u0442\u0442\u0435\u0440\u044b \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u043e\u043b\u044f \u0432 \u0446\u0435\u043b\u0435\u0432\u043e\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u0435. \u0412 \u044d\u0442\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u044d\u0442\u043e Order.     \/\/ \u0412\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u043c\u044b\u043c \u0442\u0438\u043f\u043e\u043c \u0443 \u043d\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u0441\u0430\u043c Builder (\u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, OrderBuilder), \u0447\u0442\u043e\u0431\u044b \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u043c \u0446\u0435\u043f\u043d\u043e\u0439 \u0432\u044b\u0437\u043e\u0432 \u0441\u0435\u0442\u0442\u0435\u0440\u043e\u0432.     public OrderBuilder name(String customerName) {         this.customerName = customerName;         return this;     }        public OrderBuilder service(OrderService service) {         if (service != null) {             this.service = service;         }         return this;     }      public OrderBuilder item(FoodItem item) {         items.add(item);         return this;     }      \/\/ \u041a\u043e\u043c\u0431\u043e \u043f\u0440\u0435\u0434\u043b\u043e\u0436\u0435\u043d\u0438\u044f&nbsp;     public OrderBuilder vegNuggetsHappyMeal() {         List&lt;FoodItem&gt; foodItems = new ArrayList&lt;FoodItem&gt;();         foodItems.add(new CheeseNuggets());         foodItems.add(new Pepsi(BeverageSize.S));         Meal meal = new Meal(\"Veg Nuggets Happy Meal\", foodItems, HAPPY_MENU_DISCOUNT);         return item(meal);     }      public OrderBuilder chickenNuggetsHappyMeal() {         List&lt;FoodItem&gt; foodItems = new ArrayList&lt;FoodItem&gt;();         foodItems.add(new ChickenNuggets());         foodItems.add(new CocaCola(BeverageSize.S));         Meal meal = new Meal(\"Chicken Nuggets Happy Meal\", foodItems, HAPPY_MENU_DISCOUNT);         return item(meal);     }      public OrderBuilder vegBurgerHappyMeal() {         List&lt;FoodItem&gt; foodItems = new ArrayList&lt;FoodItem&gt;();         foodItems.add(new VegBurger());         foodItems.add(new Pepsi(BeverageSize.S));         Meal meal = new Meal(\"Veg Burger Happy Meal\", foodItems, HAPPY_MENU_DISCOUNT);         return item(meal);     }      public OrderBuilder chickenBurgerHappyMeal() {         List&lt;FoodItem&gt; foodItems = new ArrayList&lt;FoodItem&gt;();         foodItems.add(new ChickenBurger());         foodItems.add(new CocaCola(BeverageSize.S));         Meal meal = new Meal(\"Chicken Burger Happy Meal\", foodItems, HAPPY_MENU_DISCOUNT);         return item(meal);     }      public Order build() {         Order order = new Order(service, items, customerName);         if (!validateOrder()) {             System.out.println(\"Sorry! Order can't be placed without service type (Take Away\/Eat Here) and any food item.\");             return null;         }         return order;     }      private boolean validateOrder() {         return (service != null) &amp;&amp; !items.isEmpty();     } }<\/code><\/pre>\n<p>\u0413\u043e\u0442\u043e\u0432\u043e! \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0438\u0448\u043b\u043e \u0432\u0440\u0435\u043c\u044f \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c <code>Main<\/code> \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0438 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442:<\/p>\n<pre><code class=\"java\">package org.trishinfotech.builder;  import org.trishinfotech.builder.beverages.BeverageSize; import org.trishinfotech.builder.beverages.cold.CocaCola; import org.trishinfotech.builder.beverages.cold.Pepsi; import org.trishinfotech.builder.beverages.hot.HotChocolate; import org.trishinfotech.builder.food.burger.ChickenBurger; import org.trishinfotech.builder.food.nuggets.CheeseNuggets; import org.trishinfotech.builder.food.nuggets.ChickenNuggets; import org.trishinfotech.builder.util.BillPrinter;  public class Main {      public static void main(String[] args) {         OrderBuilder builder1 = new OrderBuilder();         \/\/ you can see the use of chained calls of setters here. No statement terminator         \/\/ till we set all the values of the object         Order meal1 = builder1.name(\"Brijesh\").service(OrderService.TAKE_AWAY).item(new ChickenBurger())                 .item(new Pepsi(BeverageSize.M)).vegNuggetsHappyMeal().build();         BillPrinter.printItemisedBill(meal1);          OrderBuilder builder2 = new OrderBuilder();         Order meal2 = builder2.name(\"Micheal\").service(OrderService.EAT_HERE).item(new ChickenNuggets())                 .item(new CheeseNuggets()).item(new CocaCola(BeverageSize.L)).chickenBurgerHappyMeal()                 .item(new HotChocolate(BeverageSize.M)).vegBurgerHappyMeal().build();         BillPrinter.printItemisedBill(meal2);     }  }<\/code><\/pre>\n<p>&nbsp;\u0410 \u0432\u043e\u0442 \u0438 <em>\u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442<\/em> \u0440\u0430\u0431\u043e\u0442\u044b \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u044b:<\/p>\n<pre><code class=\"java\">                                                   Food Court ================================================================================================================= Service:  Take Away (2.00 Tax)                                                         Customer Name: Brijesh              -----------------------------------------------------------------------------------------------------------------                 Food Item |   Calories |    Packing |      Price |   Packing Price | Discount % | Total Price -----------------------------------------------------------------------------------------------------------------            Chicken Burger |        300 |       Wrap |       4.50 |            0.40 |       0.00 |       4.90                 Pepsi (M) |        220 |     Bottle |       2.20 |            0.75 |       0.00 |       2.95    Veg Nuggets Happy Meal |        490 | Multi-Pack |       5.00 |            2.00 |       5.00 |       6.75 ================================================================================================================= Date: 2020\/10\/09 20:02:38                                                     Total Bill (incl. taxes): 14.89 Enjoy your meal!                                                    Food Court ================================================================================================================= Service:   Eat Here (5.50 Tax)                                                         Customer Name: Micheal              -----------------------------------------------------------------------------------------------------------------                 Food Item |   Calories |    Packing |      Price |   Packing Price | Discount % | Total Price -----------------------------------------------------------------------------------------------------------------           Chicken Nuggets |        450 |  Container |       5.00 |            1.25 |       0.00 |       6.25            Cheese Nuggets |        330 |  Container |       3.80 |            1.25 |       0.00 |       5.05             Coca-Cola (L) |        290 |     Bottle |       2.00 |            0.75 |       0.00 |       2.75 Chicken Burger Happy Meal |        450 | Multi-Pack |       5.50 |            1.15 |       5.00 |       6.38         Hot Chocolate (M) |        450 | Sipper Mug |       2.30 |            1.60 |       0.00 |       3.90     Veg Burger Happy Meal |        340 | Multi-Pack |       3.90 |            1.15 |       5.00 |       4.86 ================================================================================================================= Date: 2020\/10\/09 20:02:38                                                     Total Bill (incl. taxes): 30.78 Enjoy your meal!<\/code><\/pre>\n<p>\u041d\u0443 \u0432\u043e\u0442 \u0438 \u0432\u0441\u0435! \u042f \u043d\u0430\u0434\u0435\u044e\u0441\u044c, \u0447\u0442\u043e \u044d\u0442\u043e\u0442 \u0443\u0440\u043e\u043a \u043f\u043e\u043c\u043e\u0433 \u043e\u0441\u0432\u043e\u0438\u0442\u044c \u043f\u0430\u0442\u0442\u0435\u0440\u043d Builder.<\/p>\n<p>\u0418\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u043a\u043e\u0434 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u0439\u0442\u0438 \u0437\u0434\u0435\u0441\u044c: <a href=\"https:\/\/github.com\/BrijeshSaxena\/design-pattern-real-builder\">Real-Builder-Design-Pattern-Source-Code<\/a><\/p>\n<p>\u0438 \u0437\u0434\u0435\u0441\u044c: <a href=\"https:\/\/github.com\/BrijeshSaxena\/design-pattern-builder\">Builder-Design-Pattern-Sample-Code<\/a><\/p>\n<hr>\n<blockquote>\n<p>\u0423\u0437\u043d\u0430\u0442\u044c \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u0435\u0435 \u043e \u043a\u0443\u0440\u0441\u0435 <a href=\"https:\/\/otus.pw\/UKVcm\/\"><strong>\u00ab\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f\u00bb<\/strong><\/a>. <\/p>\n<p>\u0421\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432\u0435\u0431\u0438\u043d\u0430\u0440 <a href=\"https:\/\/otus.pw\/gfjU\/\"><strong>\u00ab\u0428\u0430\u0431\u043b\u043e\u043d\u044b GRASP\u00bb<\/strong><\/a>.<\/p>\n<\/blockquote>\n<\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"https:\/\/habr.com\/ru\/company\/otus\/blog\/552412\/\"> https:\/\/habr.com\/ru\/company\/otus\/blog\/552412\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"\n<div class=\"post__text post__text_v2\" id=\"post-content-body\">\n<blockquote>\n<p><em>\u0412 \u043f\u0440\u0435\u0434\u0434\u0432\u0435\u0440\u0438\u0438 \u0441\u043a\u043e\u0440\u043e\u0433\u043e \u0441\u0442\u0430\u0440\u0442\u0430 \u043a\u0443\u0440\u0441\u0430 <\/em><a href=\"https:\/\/otus.pw\/UKVcm\/\"><strong><em>\u00ab\u0410\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0430 \u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f\u00bb<\/em><\/strong><\/a><em> \u0434\u0435\u043b\u0438\u043c\u0441\u044f \u0441 \u0432\u0430\u043c\u0438 \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u043e\u043c \u043c\u0430\u0442\u0435\u0440\u0438\u0430\u043b\u0430. <\/p>\n<p>\u041f\u0440\u0438\u0433\u043b\u0430\u0448\u0430\u0435\u043c \u0442\u0430\u043a\u0436\u0435 \u0432\u0441\u0435\u0445 \u0436\u0435\u043b\u0430\u044e\u0449\u0438\u0445 \u043d\u0430 \u043e\u0442\u043a\u0440\u044b\u0442\u044b\u0439 \u0434\u0435\u043c\u043e-\u0443\u0440\u043e\u043a <\/em><a href=\"https:\/\/otus.pw\/gfjU\/\"><strong><em>\u00ab\u0428\u0430\u0431\u043b\u043e\u043d\u044b GRASP\u00bb<\/em><\/strong><\/a><em>. \u041d\u0430 \u044d\u0442\u043e\u043c \u0437\u0430\u043d\u044f\u0442\u0438\u0438 \u043c\u044b \u043f\u0440\u043e\u0430\u043d\u0430\u043b\u0438\u0437\u0438\u0440\u0443\u0435\u043c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0435 \u0440\u0430\u0437\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0430 \u0438 \u0440\u0430\u0441\u0441\u043c\u043e\u0442\u0440\u0438\u043c 9 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 GRASP. \u041f\u0440\u0438\u0441\u043e\u0435\u0434\u0438\u043d\u044f\u0439\u0442\u0435\u0441\u044c!<\/em><\/p>\n<\/blockquote>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<hr>\n<p>\u0410 \u0432\u043e\u0442 \u0438 \u044f \u0441\u043e \u0441\u0432\u043e\u0435\u0439 \u043e\u0447\u0435\u0440\u0435\u0434\u043d\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435\u0439 \u043e \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u0430\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0430 \u0438\u043c\u0435\u043d\u043d\u043e \u043e \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u0435 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f Builder (\u043e\u043d \u0436\u0435 \u0421\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u044c). \u041e\u0447\u0435\u043d\u044c \u043f\u043e\u043b\u0435\u0437\u043d\u044b\u0439 \u043f\u0430\u0442\u0442\u0435\u0440\u043d \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043d\u0430\u043c \u0448\u0430\u0433 \u0437\u0430 \u0448\u0430\u0433\u043e\u043c \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b.<\/p>\n<h3>\u041f\u0430\u0442\u0442\u0435\u0440\u043d \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f Builder&nbsp;<\/h3>\n<ul>\n<li>\n<p>\u041f\u0430\u0442\u0442\u0435\u0440\u043d \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f Builder \u0440\u0430\u0437\u0440\u0430\u0431\u043e\u0442\u0430\u043d \u0434\u043b\u044f \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f \u0433\u0438\u0431\u043a\u043e\u0433\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0438.<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p>\u041f\u0430\u0442\u0442\u0435\u0440\u043d \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f Builder \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0442\u0434\u0435\u043b\u0438\u0442\u044c \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u0441\u043b\u043e\u0436\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043e\u0442 \u0435\u0433\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f.<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p>\u041f\u0430\u0442\u0442\u0435\u0440\u043d Builder \u0441\u043e\u0437\u0434\u0430\u0435\u0442 \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0438 \u043f\u043e\u044d\u0442\u0430\u043f\u043d\u044b\u0439 \u043f\u043e\u0434\u0445\u043e\u0434.<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p>\u041f\u0430\u0442\u0442\u0435\u0440\u043d \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u0434\u0438\u043d \u0438\u0437 \u043b\u0443\u0447\u0448\u0438\u0445 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u043b\u043e\u0436\u043d\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432.<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p>\u042d\u0442\u043e \u043e\u0434\u0438\u043d \u0438\u0437 <a href=\"https:\/\/en.wikipedia.org\/wiki\/Design_Patterns\">\u043f\u0430\u0442\u0442\u0435\u0440\u043d\u043e\u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0431\u0430\u043d\u0434\u044b \u0447\u0435\u0442\u044b\u0440\u0435\u0445 (GoF),<\/a> \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442, \u043a\u0430\u043a \u0440\u0435\u0448\u0430\u0442\u044c \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0449\u0438\u0435 \u0437\u0430\u0434\u0430\u0447\u0438 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u043e-\u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u043c \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u0438.<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p>\u042d\u0442\u043e\u0442 \u043f\u0430\u0442\u0442\u0435\u0440\u043d \u043f\u043e\u043b\u0435\u0437\u0435\u043d \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0440\u0430\u0437\u043d\u044b\u0445 \u0438\u043c\u043c\u0443\u0442\u0430\u0431\u0435\u043b\u044c\u043d\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u0434\u043d\u043e\u0433\u043e \u0438 \u0442\u043e\u0433\u043e \u0436\u0435 \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u0430 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430.<\/p>\n<\/li>\n<\/ul>\n<p>\u041f\u0430\u0442\u0442\u0435\u0440\u043d Builder \u2014 \u044d\u0442\u043e \u043f\u0430\u0442\u0442\u0435\u0440\u043d \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u043e\u044d\u0442\u0430\u043f\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u043b\u043e\u0436\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0447\u0435\u0442\u043a\u043e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439. \u0421\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u043e \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u0438\u0440\u0443\u0435\u0442\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c-\u0440\u0430\u0441\u043f\u043e\u0440\u044f\u0434\u0438\u0442\u0435\u043b\u0435\u043c (director), \u043a\u043e\u0442\u043e\u0440\u043e\u043c\u0443 \u043d\u0443\u0436\u043d\u043e \u0437\u043d\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0442\u0438\u043f \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0435\u043c\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430.<\/p>\n<figure class=\"full-width\"><figcaption><\/figcaption><\/figure>\n<p>\u0418\u0442\u0430\u043a, \u043f\u0430\u0442\u0442\u0435\u0440\u043d \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f Builder \u043c\u043e\u0436\u043d\u043e \u0440\u0430\u0437\u0431\u0438\u0442\u044c \u043d\u0430 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0438\u0435 \u0432\u0430\u0436\u043d\u044b\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u044b:<\/p>\n<ul>\n<li>\n<p><strong>Product (\u043f\u0440\u043e\u0434\u0443\u043a\u0442)<\/strong> &#8212; \u041a\u043b\u0430\u0441\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0441\u043b\u043e\u0436\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u044b \u043f\u044b\u0442\u0430\u0435\u043c\u0441\u044f \u0448\u0430\u0433 \u0437\u0430 \u0448\u0430\u0433\u043e\u043c \u0441\u043a\u043e\u043d\u0441\u0442\u0440\u0443\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043f\u0440\u043e\u0441\u0442\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b.<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p><strong>Builder (\u0441\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u044c)<\/strong> &#8212; \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441\/\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0432\u0441\u0435 \u044d\u0442\u0430\u043f\u044b, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0434\u043b\u044f \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0441\u0442\u0432\u0430 \u0441\u043b\u043e\u0436\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430-<strong>\u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430<\/strong>. \u041a\u0430\u043a \u043f\u0440\u0430\u0432\u0438\u043b\u043e, \u0437\u0434\u0435\u0441\u044c \u043e\u0431\u044a\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f (\u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u043e) \u0432\u0441\u0435 \u044d\u0442\u0430\u043f\u044b (buildPart), \u0430 \u0438\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f \u043e\u0442\u043d\u043e\u0441\u0438\u0442\u0441\u044f \u043a \u043a\u043b\u0430\u0441\u0441\u0430\u043c \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0441\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u0435\u0439 (ConcreteBuilder).<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p><strong>ConcreteBuilder (\u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0439 \u0441\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u044c)<\/strong> &#8212; \u043a\u043b\u0430\u0441\u0441-\u0441\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u044c, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438\u0439 \u043a\u043e\u0434 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430-<strong>\u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430<\/strong>. \u0423 \u043d\u0430\u0441 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0430\u0437\u043d\u044b\u0445 <strong>ConcreteBuilder<\/strong>-\u043a\u043b\u0430\u0441\u0441\u043e\u0432, \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u0443\u044e \u0440\u0430\u0437\u043d\u043e\u0432\u0438\u0434\u043d\u043e\u0441\u0442\u044c \u0438\u043b\u0438 \u0441\u043f\u043e\u0441\u043e\u0431 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430-<strong>\u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430<\/strong>.<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p><strong>Director (\u0440\u0430\u0441\u043f\u043e\u0440\u044f\u0434\u0438\u0442\u0435\u043b\u044c)<\/strong> &#8212; \u0441\u0443\u043f\u0435\u0440\u0432\u0438\u0437\u0438\u043e\u043d\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441, \u043f\u043e\u0434 \u043a\u043e\u043d\u0440\u043e\u043b\u0435\u043c \u043a\u043e\u0442\u0440\u043e\u0433\u043e \u0441\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0441\u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u0435 \u044d\u0442\u0430\u043f\u044b \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430-\u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430. \u0420\u0430\u0441\u043f\u043e\u0440\u044f\u0434\u0438\u0442\u0435\u043b\u044c \u043e\u0431\u044b\u0447\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0430\u0435\u0442 \u043d\u0430 \u0432\u0445\u043e\u0434 \u0441\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u044f \u0441 \u044d\u0442\u0430\u043f\u0430\u043c\u0438 \u043d\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 \u0432 \u0447\u0435\u0442\u043a\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435 \u0434\u043b\u044f \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430-\u043f\u0440\u043e\u0434\u0443\u043a\u0442\u0430.<\/p>\n<\/li>\n<\/ul>\n<p><strong>\u041f\u0430\u0442\u0442\u0435\u0440\u043d \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/strong> <strong>Builder <\/strong>\u0440\u0435\u0448\u0430\u0435\u0442 \u0442\u0430\u043a\u0438\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u043a\u0430\u043a:<\/p>\n<ul>\n<li>\n<p>\u041a\u0430\u043a \u043a\u043b\u0430\u0441\u0441 (\u0442\u043e\u0442 \u0436\u0435 \u0441\u0430\u043c\u044b\u0439 \u043f\u0440\u043e\u0446\u0435\u0441\u0441 \u0441\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0430) \u043c\u043e\u0436\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430?<\/p>\n<\/li>\n<\/ul>\n<ul>\n<li>\n<p>\u041a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0443\u043f\u0440\u043e\u0441\u0442\u0438\u0442\u044c \u043a\u043b\u0430\u0441\u0441, \u0437\u0430\u043d\u0438\u043c\u0430\u044e\u0449\u0438\u0439\u0441\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435\u043c \u0441\u043b\u043e\u0436\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430?<\/p>\n<\/li>\n<\/ul>\n<p>\u0414\u0430\u0432\u0430\u0439\u0442\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440 \u0441\u043e \u0441\u0431\u043e\u0440\u043a\u043e\u0439 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u0435\u0439, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043f\u0430\u0442\u0442\u0435\u0440\u043d \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f Builder.<\/p>\n<h3>\u041f\u0440\u0438\u043c\u0435\u0440 \u0441\u043e \u0441\u0431\u043e\u0440\u043a\u043e\u0439 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u0435\u0439 \u0441 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435\u043c \u043f\u0430\u0442\u0442\u0435\u0440\u043d\u0430 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f Builder<\/h3>\n<p><strong>\u0428\u0430\u0433 1:<\/strong> \u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u043a\u043b\u0430\u0441\u0441 <strong>Car <\/strong>(\u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044c), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432 \u043d\u0430\u0448\u0435\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u044f\u0432\u043b\u044f\u0435\u0442\u0441\u044f \u043f\u0440\u043e\u0434\u0443\u043a\u0442\u043e\u043c:<\/p>\n<pre><code class=\"java\">package org.trishinfotech.builder;  public class Car {      private String chassis;     private String body;     private String paint;     private String interior;          public Car() {          super();     }      public Car(String chassis, String body, String paint, String interior) {         this();         this.chassis = chassis;         this.body = body;         this.paint = paint;         this.interior = interior;     }      public String getChassis() {         return chassis;     }  \t\tpublic void setChassis(String chassis) {         this.chassis = chassis;      }      public String getBody() {         return body;     }      public void setBody(String body) {         this.body = body;     }      public String getPaint() {         return paint;     }      public void setPaint(String paint) {         this.paint = paint;     } \t\tpublic String getInterior() {         return interior;     }      public void setInterior(String interior) {         this.interior = interior;     }      public boolean doQualityCheck() {         return (chassis != null &amp;&amp; !chassis.trim().isEmpty()) &amp;&amp; (body != null &amp;&amp; !body.trim().isEmpty())                 &amp;&amp; (paint != null &amp;&amp; !paint.trim().isEmpty()) &amp;&amp; (interior != null &amp;&amp; !interior.trim().isEmpty());     }      @Override     public String toString() {         \/\/ StringBuilder class also uses Builder Design Pattern with implementation of java.lang.Appendable interface         StringBuilder builder = new StringBuilder();         builder.append(\"Car [chassis=\").append(chassis).append(\", body=\").append(body).append(\", paint=\").append(paint)         return builder.toString();     }  }<\/code><\/pre>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u044f \u0434\u043e\u0431\u0430\u0432\u0438\u043b \u0432 \u043a\u043b\u0430\u0441\u0441 \u043f\u0440\u043e\u0432\u0435\u0440\u043e\u0447\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 <code>doQualityCheck<\/code>. \u042f \u0441\u0447\u0438\u0442\u0430\u044e, \u0447\u0442\u043e Builder \u043d\u0435 \u0434\u043e\u043b\u0436\u0435\u043d \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043d\u0435\u043f\u043e\u043b\u043d\u044b\u0435 \u0438\u043b\u0438 \u043d\u0435\u0432\u0430\u043b\u0438\u0434\u043d\u044b\u0435 Product-\u043e\u0431\u044a\u0435\u043a\u0442\u044b. \u0422\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u044d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u043f\u043e\u043c\u043e\u0436\u0435\u0442 \u043d\u0430\u043c \u0432 \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0435 \u0441\u0431\u043e\u0440\u043a\u0438 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u0435\u0439.<\/p>\n<p><strong>\u0428\u0430\u0433 2:<\/strong> \u0421\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u044b\u0439 \u043a\u043b\u0430\u0441\u0441\/\u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 <code>CarBuilder<\/code>, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0438\u0442\u0435 \u0432\u0441\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0435 \u0448\u0430\u0433\u0438 \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044f.<\/p>\n<pre><code class=\"java\">package org.trishinfotech.builder;  public interface CarBuilder {      \/\/ \u042d\u0442\u0430\u043f 1     public CarBuilder fixChassis();      \/\/ \u042d\u0442\u0430\u043f 2     public CarBuilder fixBody();      \/\/ \u042d\u0442\u0430\u043f 3     public CarBuilder paint();      \/\/ \u042d\u0442\u0430\u043f 4      public CarBuilder fixInterior();      \/\/ \u0412\u044b\u043f\u0443\u0441\u043a \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044f      public Car build(); }<\/code><\/pre>\n<p>\u041e\u0431\u0440\u0430\u0442\u0438\u0442\u0435 \u0432\u043d\u0438\u043c\u0430\u043d\u0438\u0435, \u0447\u0442\u043e \u044f \u0441\u0434\u0435\u043b\u0430\u043b \u0442\u0438\u043f <code>CarBuilder<\/code> \u0442\u0438\u043f\u043e\u043c \u0432\u043e\u0437\u0432\u0440\u0430\u0442\u0430 \u0432\u0441\u0435\u0445 \u044d\u0442\u0430\u043f\u043e\u0432, \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0445 \u0437\u0434\u0435\u0441\u044c. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442 \u043d\u0430\u043c \u0432\u044b\u0437\u044b\u0432\u0430\u0442\u044c \u044d\u0442\u0430\u043f\u044b \u043f\u043e \u0446\u0435\u043f\u043e\u0447\u043a\u0435. \u0417\u0434\u0435\u0441\u044c \u0435\u0441\u0442\u044c \u043e\u0434\u0438\u043d \u043e\u0447\u0435\u043d\u044c \u0432\u0430\u0436\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434 <code>build<\/code><em>,<\/em> \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u0430\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0441\u044f \u0432 \u0442\u043e\u043c, \u0447\u0442\u043e\u0431\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u0438\u043b\u0438 \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043a\u043e\u043d\u0435\u0447\u043d\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 <code>Car<\/code>. \u042d\u0442\u043e\u0442 \u043c\u0435\u0442\u043e\u0434 \u0444\u0430\u043a\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u043f\u0440\u043e\u0432\u0435\u0440\u044f\u0435\u0442 \u0433\u043e\u0434\u043d\u043e\u0441\u0442\u044c \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044f \u0438 \u0432\u044b\u043f\u0443\u0441\u043a\u0430\u0435\u0442 (\u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442) \u0435\u0433\u043e \u0442\u043e\u043b\u044c\u043a\u043e \u0432 \u0442\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435, \u0435\u0441\u043b\u0438 \u0435\u0433\u043e \u0441\u0431\u043e\u0440\u043a\u0430 \u0437\u0430\u0432\u0435\u0440\u0448\u0435\u043d\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u043e (\u0432\u0441\u0435 \u0432\u0430\u043b\u0438\u0434\u043d\u043e).<\/p>\n<p><strong>\u0428\u0430\u0433 3:<\/strong> \u0422\u0435\u043f\u0435\u0440\u044c \u043f\u043e\u0440\u0430 \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c <code>ConcreteBuilder<\/code>. \u041a\u0430\u043a \u044f \u0443\u0436\u0435 \u0443\u043f\u043e\u043c\u0438\u043d\u0430\u043b, \u0443 \u043d\u0430\u0441 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u044b <code>ConcreteBuilder<\/code>, \u0438 \u043a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043d\u0438\u0445 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u0441\u0431\u043e\u0440\u043a\u0443 \u043f\u043e-\u0441\u0432\u043e\u0435\u043c\u0443, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043d\u0430\u043c \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 <code>Car<\/code>.<\/p>\n<p>\u0418\u0442\u0430\u043a, \u043d\u0438\u0436\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d \u043a\u043e\u0434 <code>ClassicCarBuilder<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u043e\u0431\u0438\u0440\u0430\u0435\u0442 \u0441\u0442\u0430\u0440\u044b\u0435 \u043c\u043e\u0434\u0435\u043b\u0438 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u0435\u0439.<\/p>\n<pre><code class=\"java\">package org.trishinfotech.builder;  public class ClassicCarBuilder implements CarBuilder {      private String chassis;     private String body;     private String paint;     private String interior;      public ClassicCarBuilder() {         super();     }      @Override     public CarBuilder fixChassis() {         System.out.println(\"Assembling chassis of the classical model\");         this.chassis = \"Classic Chassis\";         return this;     }      @Override     public CarBuilder fixBody() {         System.out.println(\"Assembling body of the classical model\");         this.body = \"Classic Body\";         return this;     }      @Override     public CarBuilder paint() {         System.out.println(\"Painting body of the classical model\");         this.paint = \"Classic White Paint\";         return this;     }        @Override     public CarBuilder fixInterior() {         System.out.println(\"Setting up interior of the classical model\");         this.interior = \"Classic interior\";         return this;     }      @Override \t\tpublic Car build() {         Car car = new Car(chassis, body, paint, interior);         if (car.doQualityCheck()) {             return car;         } else {             System.out.println(\"Car assembly is incomplete. Can't deliver!\");         }         return null;     }  }<\/code><\/pre>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u043f\u0438\u0448\u0435\u043c \u0435\u0449\u0435 \u043e\u0434\u0438\u043d \u0441\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u044c <code>ModernCarBuilder<\/code> \u0434\u043b\u044f \u0441\u0431\u043e\u0440\u043a\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0439 \u043c\u043e\u0434\u0435\u043b\u0438 \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044f.<\/p>\n<pre><code class=\"java\">package org.trishinfotech.builder;  public class ModernCarBuilder implements CarBuilder {      private String chassis;     private String body;     private String paint;     private String interior;      public ModernCarBuilder() {         super();     }      @Override     public CarBuilder fixChassis() {         System.out.println(\"Assembling chassis of the modern model\");         this.chassis = \"Modern Chassis\";         return this;     }      @Override     public CarBuilder fixBody() {         System.out.println(\"Assembling body of the modern model\");         this.body = \"Modern Body\";         return this;     }        @Override     public CarBuilder paint() {         System.out.println(\"Painting body of the modern model\");         this.paint = \"Modern Black Paint\";         return this;     }      @Override     public CarBuilder fixInterior() {         System.out.println(\"Setting up interior of the modern model\");         this.interior = \"Modern interior\";         return this;     }      @Override     public Car build() {         Car car = new Car(chassis, body, paint, interior);         if (car.doQualityCheck()) {             return car;         } else {             System.out.println(\"Car assembly is incomplete. Can't deliver!\");         }         return null;     } }<\/code><\/pre>\n<p>&nbsp;\u0418 \u0435\u0449\u0435 \u043e\u0434\u0438\u043d <code>SportsCarBuilder<\/code> \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u043f\u043e\u0440\u0442\u0438\u0432\u043d\u043e\u0433\u043e \u0430\u0432\u0442\u043e\u043c\u043e\u0431\u0438\u043b\u044f.<\/p>\n<pre><code class=\"java\">package org.trishinfotech.builder;  public class SportsCarBuilder implements CarBuilder {      private String chassis;     private String body;     private String paint;     private String interior;      public SportsCarBuilder() {         super();     }      @Override     public CarBuilder fixChassis() {         System.out.println(\"Assembling chassis of the sports model\");         this.chassis = \"Sporty Chassis\";         return this;     }       @Override     public CarBuilder fixBody() {         System.out.println(\"Assembling body of the sports model\");         this.body = \"Sporty Body\";         return this;     }        @Override     public CarBuilder paint() {         System.out.println(\"Painting body of the sports model\");         this.paint = \"Sporty Torch Red Paint\";         return this;     }      @Override     public CarBuilder fixInterior() {         System.out.println(\"Setting up interior of the sports model\");         this.interior = \"Sporty interior\";         return this;     }      @Override     public Car build() {         Car car = new Car(chassis, body, paint, interior);         if<\/code><\/pre>\n<\/hr>\n<\/blockquote>\n<\/div>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-321451","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/321451","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=321451"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/321451\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=321451"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=321451"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=321451"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}