{"id":284728,"date":"2017-04-10T16:55:02","date_gmt":"2017-04-10T12:55:02","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=284728"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=284728","title":{"rendered":"\u0428\u0430\u0431\u043b\u043e\u043d\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441 \u0447\u0435\u043b\u043e\u0432\u0435\u0447\u0435\u0441\u043a\u0438\u043c \u043b\u0438\u0446\u043e\u043c"},"content":{"rendered":"<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/bb8\/685\/ef6\/bb8685ef636143ac9713d0131774c7e0.JPG\" alt=\"image\"\/><\/p>\n<p>  <\/p>\n<p>\u0428\u0430\u0431\u043b\u043e\u043d\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u2014 \u044d\u0442\u043e \u0441\u043f\u043e\u0441\u043e\u0431 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0449\u0438\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c. \u0422\u043e\u0447\u043d\u0435\u0435, \u044d\u0442\u043e \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0430 \u043f\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c. \u042d\u0442\u043e \u043d\u0435 \u043a\u043b\u0430\u0441\u0441\u044b, \u043f\u0430\u043a\u0435\u0442\u044b \u0438\u043b\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432 \u0441\u0432\u043e\u0451 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u043e\u0436\u0438\u0434\u0430\u0442\u044c \u0432\u043e\u043b\u0448\u0435\u0431\u0441\u0442\u0432\u0430. <\/p>\n<p>  <\/p>\n<p>\u041a\u0430\u043a \u0441\u043a\u0430\u0437\u0430\u043d\u043e \u0432 \u0412\u0438\u043a\u0438\u043f\u0435\u0434\u0438\u0438:<\/p>\n<p>  <\/p>\n<blockquote><p>\u0412 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0439 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u0438\u0438 \u0448\u0430\u0431\u043b\u043e\u043d \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u2014 \u044d\u0442\u043e \u043c\u043d\u043e\u0433\u043e\u043a\u0440\u0430\u0442\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0449\u0435\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u0428\u0430\u0431\u043b\u043e\u043d \u2014 \u044d\u0442\u043e \u043d\u0435 \u0437\u0430\u043a\u043e\u043d\u0447\u0435\u043d\u043d\u043e\u0435 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0438\u043b\u0438 \u043c\u0430\u0448\u0438\u043d\u043d\u044b\u0439 \u043a\u043e\u0434. \u042d\u0442\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u043a \u0440\u0435\u0448\u0435\u043d\u0438\u044e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f\u0445.<\/p><\/blockquote>\n<p>  <\/p>\n<h3 id=\"imagehttpshabrastorageorgfiles408734bfb408734bfb5ec43878ea5b9a8b22fd277png-budte-ostorozhny\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/408\/734\/bfb\/408734bfb5ec43878ea5b9a8b22fd277.png\" alt=\"image\"\/> \u0411\u0443\u0434\u044c\u0442\u0435 \u043e\u0441\u0442\u043e\u0440\u043e\u0436\u043d\u044b<\/h3>\n<p>  <\/p>\n<ul>\n<li>\u0428\u0430\u0431\u043b\u043e\u043d\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u2014 \u043d\u0435 \u00ab\u0441\u0435\u0440\u0435\u0431\u0440\u044f\u043d\u0430\u044f \u043f\u0443\u043b\u044f\u00bb.<\/li>\n<li>\u041d\u0435 \u043f\u044b\u0442\u0430\u0439\u0442\u0435\u0441\u044c \u0432\u043d\u0435\u0434\u0440\u044f\u0442\u044c \u0438\u0445 \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u044f \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u0433\u0430\u0442\u0438\u0432\u043d\u044b\u043c\u0438. \u041f\u043e\u043c\u043d\u0438\u0442\u0435, \u0447\u0442\u043e \u0448\u0430\u0431\u043b\u043e\u043d\u044b \u2014 \u044d\u0442\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u044b <strong>\u0440\u0435\u0448\u0435\u043d\u0438\u044f<\/strong>, \u0430 \u043d\u0435 <strong>\u043f\u043e\u0438\u0441\u043a\u0430<\/strong> \u043f\u0440\u043e\u0431\u043b\u0435\u043c. \u0422\u0430\u043a \u0447\u0442\u043e \u043d\u0435 \u043f\u0435\u0440\u0435\u043c\u0443\u0434\u0440\u0438\u0442\u0435.<\/li>\n<li>\u0415\u0441\u043b\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u0438\u0445 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0438 \u0432 \u043d\u0443\u0436\u043d\u044b\u0445 \u043c\u0435\u0441\u0442\u0430\u0445, \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u0441\u043f\u0430\u0441\u0435\u043d\u0438\u0435\u043c. \u0412 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0443 \u0432\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u0435\u0449\u0451 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c.<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u044b \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043d\u0430 PHP 7, \u043d\u043e \u043f\u0443\u0441\u0442\u044c \u0432\u0430\u0441 \u044d\u0442\u043e \u043d\u0435 \u0441\u043c\u0443\u0449\u0430\u0435\u0442, \u0432\u0435\u0434\u044c \u0437\u0430\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u0432 \u0448\u0430\u0431\u043b\u043e\u043d\u0430\u0445 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u044b \u043d\u0435\u0438\u0437\u043c\u0435\u043d\u043d\u044b. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, <strong>\u0432\u043d\u0435\u0434\u0440\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 \u044f\u0437\u044b\u043a\u043e\u0432<\/strong>.<\/p>\n<p><a name=\"habracut\"><\/a>  <\/p>\n<h3 id=\"vidy-shablonov-proektirovaniya\">\u0412\u0438\u0434\u044b \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/h3>\n<p>  <\/p>\n<ul>\n<li><a href=\"https:\/\/habrahabr.ru\/company\/mailru\/blog\/325492\/#porozhdayuschie-shablony-proektirovaniya\">\u041f\u043e\u0440\u043e\u0436\u0434\u0430\u044e\u0449\u0438\u0435<\/a><\/li>\n<li><a href=\"https:\/\/habrahabr.ru\/company\/mailru\/blog\/325492\/#strukturnye-shablony-proektirovaniya\">\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u044b\u0435<\/a><\/li>\n<li><a href=\"https:\/\/habrahabr.ru\/company\/mailru\/blog\/325492\/#povedencheskie-shablony-proektirovaniya\">\u041f\u043e\u0432\u0435\u0434\u0435\u043d\u0447\u0435\u0441\u043a\u0438\u0435<\/a><\/li>\n<\/ul>\n<p>  <\/p>\n<h2 id=\"porozhdayuschie-shablony-proektirovaniya\">\u041f\u043e\u0440\u043e\u0436\u0434\u0430\u044e\u0449\u0438\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/h2>\n<p>  <\/p>\n<p><strong>\u0412\u043a\u0440\u0430\u0442\u0446\u0435<\/strong><\/p>\n<p>  <\/p>\n<p>\u041f\u043e\u0440\u043e\u0436\u0434\u0430\u044e\u0449\u0438\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u044b \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 (instantiate) \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0438\u043b\u0438 \u0433\u0440\u0443\u043f\u043f\u044b \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432.<\/p>\n<p>  <\/p>\n<p><strong>\u0412\u0438\u043a\u0438\u043f\u0435\u0434\u0438\u044f<\/strong><\/p>\n<p>  <\/p>\n<blockquote><p>\u0412 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0439 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u0438\u0438 \u043f\u043e\u0440\u043e\u0436\u0434\u0430\u044e\u0449\u0438\u043c\u0438 \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u0448\u0430\u0431\u043b\u043e\u043d\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0442 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c\u044b \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u0447\u0442\u043e\u0431\u044b \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u043c \u0434\u043b\u044f \u0434\u0430\u043d\u043d\u043e\u0439 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c. \u0411\u0430\u0437\u043e\u0432\u044b\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u0430\u043c \u0432 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u0435 \u0438\u043b\u0438 \u043a \u0435\u0451 \u0443\u0441\u043b\u043e\u0436\u043d\u0435\u043d\u0438\u044e. \u041f\u043e\u0440\u043e\u0436\u0434\u0430\u044e\u0449\u0438\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u044b \u043f\u044b\u0442\u0430\u044e\u0442\u0441\u044f \u0440\u0435\u0448\u0430\u0442\u044c \u044d\u0442\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044f \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432.<\/p><\/blockquote>\n<p>  <\/p>\n<ul>\n<li><a href=\"https:\/\/habrahabr.ru\/company\/mailru\/blog\/325492\/#imagehttpshabrastorageorgfiles49cfd95d249cfd95d226e47ceb73b85d6c35ff184png-prostaya-fabrika\">\u041f\u0440\u043e\u0441\u0442\u0430\u044f \u0444\u0430\u0431\u0440\u0438\u043a\u0430<\/a><\/li>\n<li><a href=\"https:\/\/habrahabr.ru\/company\/mailru\/blog\/325492\/#imagehttpshabrastorageorgfilesdbd913d1edbd913d1e60f4c4e9a0991241f8b246epng-fabrichnyy-metod\">\u0424\u0430\u0431\u0440\u0438\u0447\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434<\/a><\/li>\n<li><a href=\"https:\/\/habrahabr.ru\/company\/mailru\/blog\/325492\/#imagehttpshabrastorageorgfilesa079a0c34a079a0c348ef4f79b4fe7ac190407f3epng-abstraktnaya-fabrika\">\u0410\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u0430\u044f \u0444\u0430\u0431\u0440\u0438\u043a\u0430<\/a><\/li>\n<li><a href=\"https:\/\/habrahabr.ru\/company\/mailru\/blog\/325492\/#imagehttpshabrastorageorgfiles301beff6b301beff6b71b4be18c4ab10aaabb464fpng-stroitel\">\u0421\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u044c<\/a><\/li>\n<li><a href=\"https:\/\/habrahabr.ru\/company\/mailru\/blog\/325492\/#imagehttpshabrastorageorgfilesa730be6c4a730be6c433647d3af9858e505876141png-prototip\">\u041f\u0440\u043e\u0442\u043e\u0442\u0438\u043f<\/a><\/li>\n<li><a href=\"https:\/\/habrahabr.ru\/company\/mailru\/blog\/325492\/#imagehttpshabrastorageorgfiles46db1404e46db1404ea144dbf8b16073d5397698dpng-odinochka\">\u041e\u0434\u0438\u043d\u043e\u0447\u043a\u0430<\/a><\/li>\n<\/ul>\n<p>  <\/p>\n<h3 id=\"imagehttpshabrastorageorgfiles49cfd95d249cfd95d226e47ceb73b85d6c35ff184png-prostaya-fabrika\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/49c\/fd9\/5d2\/49cfd95d226e47ceb73b85d6c35ff184.png\" alt=\"image\"\/> \u041f\u0440\u043e\u0441\u0442\u0430\u044f \u0444\u0430\u0431\u0440\u0438\u043a\u0430<\/h3>\n<p>  <\/p>\n<p><strong>\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u044f <\/strong><\/p>\n<p>  <\/p>\n<p>\u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0432\u044b \u0441\u0442\u0440\u043e\u0438\u0442\u0435 \u0434\u043e\u043c \u0438 \u0432\u0430\u043c \u043d\u0443\u0436\u043d\u044b \u0434\u0432\u0435\u0440\u0438. \u0411\u0443\u0434\u0435\u0442 \u0431\u0430\u0440\u0434\u0430\u043a, \u0435\u0441\u043b\u0438 \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437, \u043a\u043e\u0433\u0434\u0430 \u0432\u0430\u043c \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u0434\u0432\u0435\u0440\u044c, \u0432\u044b \u0441\u0442\u0430\u043d\u0435\u0442\u0435 \u0432\u043e\u043e\u0440\u0443\u0436\u0430\u0442\u044c\u0441\u044f \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442\u0430\u043c\u0438 \u0438 \u0434\u0435\u043b\u0430\u0442\u044c \u0435\u0451 \u043d\u0430 \u0441\u0442\u0440\u043e\u0439\u043f\u043b\u043e\u0449\u0430\u0434\u043a\u0435. \u0412\u043c\u0435\u0441\u0442\u043e \u044d\u0442\u043e\u0433\u043e \u0432\u044b \u0437\u0430\u043a\u0430\u0436\u0435\u0442\u0435 \u0434\u0432\u0435\u0440\u0438 \u043d\u0430 \u0444\u0430\u0431\u0440\u0438\u043a\u0435.<\/p>\n<p>  <\/p>\n<p><strong>\u0412\u043a\u0440\u0430\u0442\u0446\u0435<\/strong><\/p>\n<p>  <\/p>\n<p>\u041f\u0440\u043e\u0441\u0442\u0430\u044f \u0444\u0430\u0431\u0440\u0438\u043a\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u0434\u043b\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u0431\u0435\u0437 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u043a\u0430\u043a\u043e\u0439-\u043b\u0438\u0431\u043e \u043b\u043e\u0433\u0438\u043a\u0438 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430. <\/p>\n<p>  <\/p>\n<p><strong>\u0412\u0438\u043a\u0438\u043f\u0435\u0434\u0438\u044f<\/strong><\/p>\n<p>  <\/p>\n<blockquote><p>\u0412 \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 \u0444\u0430\u0431\u0440\u0438\u043a\u043e\u0439 \u043d\u0430\u0437\u044b\u0432\u0430\u0435\u0442\u0441\u044f \u043e\u0431\u044a\u0435\u043a\u0442, \u0441\u043e\u0437\u0434\u0430\u044e\u0449\u0438\u0439 \u0434\u0440\u0443\u0433\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b. \u0424\u043e\u0440\u043c\u0430\u043b\u044c\u043d\u043e \u0444\u0430\u0431\u0440\u0438\u043a\u0430 \u2014 \u044d\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u044f \u0438\u043b\u0438 \u043c\u0435\u0442\u043e\u0434, \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u044e\u0449\u0430\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0440\u0430\u0437\u043d\u044b\u0445 \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u043e\u0432 \u0438\u043b\u0438 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0438\u0437 \u0432\u044b\u0437\u043e\u0432\u0430 \u043a\u0430\u043a\u043e\u0433\u043e-\u0442\u043e \u043c\u0435\u0442\u043e\u0434\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u043d\u043e\u0432\u044b\u043c.<\/p><\/blockquote>\n<p><strong>\u041f\u0440\u0438\u043c\u0435\u0440<\/strong><\/p>\n<p>  <\/p>\n<p>\u0414\u043b\u044f \u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u043c \u043d\u0443\u0436\u0435\u043d \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u0432\u0435\u0440\u0438 \u0438 \u0435\u0433\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f.<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">interface Door {     public function getWidth(): float;     public function getHeight(): float; }  class WoodenDoor implements Door {     protected $width;     protected $height;      public function __construct(float $width, float $height)     {         $this-&gt;width = $width;         $this-&gt;height = $height;     }      public function getWidth(): float     {         return $this-&gt;width;     }      public function getHeight(): float     {         return $this-&gt;height;     } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0441\u043e\u043e\u0440\u0443\u0434\u0438\u043c \u0444\u0430\u0431\u0440\u0438\u043a\u0443 \u0434\u0432\u0435\u0440\u0435\u0439, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043e\u0437\u0434\u0430\u0451\u0442 \u0438 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043d\u0430\u043c \u0434\u0432\u0435\u0440\u0438.<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">class DoorFactory {     public static function makeDoor($width, $height): Door     {         return new WoodenDoor($width, $height);     } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435:<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">$door = DoorFactory:makeDoor(100, 200); echo 'Width: ' . $door-&gt;getWidth(); echo 'Height: ' . $door-&gt;getHeight();<\/code><\/pre>\n<p>  <\/p>\n<p><strong>\u041a\u043e\u0433\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c?<\/strong><\/p>\n<p>  <\/p>\n<p>\u041a\u043e\u0433\u0434\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442 \u043a\u0430\u043a\u0443\u044e-\u0442\u043e \u043b\u043e\u0433\u0438\u043a\u0443, \u0430 \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u0440\u0438\u0441\u0432\u0430\u0438\u0432\u0430\u043d\u0438\u0439, \u0442\u043e \u0438\u043c\u0435\u0435\u0442 \u0441\u043c\u044b\u0441\u043b \u0434\u0435\u043b\u0435\u0433\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0437\u0430\u0434\u0430\u0447\u0443 \u0432\u044b\u0434\u0435\u043b\u0435\u043d\u043d\u043e\u0439 \u0444\u0430\u0431\u0440\u0438\u043a\u0435, \u0430 \u043d\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u0442\u044c \u043f\u043e\u0432\u0441\u044e\u0434\u0443 \u043e\u0434\u0438\u043d \u0438 \u0442\u043e\u0442 \u0436\u0435 \u043a\u043e\u0434.<\/p>\n<p>  <\/p>\n<h3 id=\"imagehttpshabrastorageorgfilesdbd913d1edbd913d1e60f4c4e9a0991241f8b246epng-fabrichnyy-metod\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/dbd\/913\/d1e\/dbd913d1e60f4c4e9a0991241f8b246e.png\" alt=\"image\"\/> \u0424\u0430\u0431\u0440\u0438\u0447\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434<\/h3>\n<p>  <\/p>\n<p><strong>\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u044f <\/strong><\/p>\n<p>  <\/p>\n<p>\u041e\u0434\u043d\u0430 \u043a\u0430\u0434\u0440\u043e\u0432\u0438\u0447\u043a\u0430 \u043d\u0435 \u0432 \u0441\u0438\u043b\u0430\u0445 \u043f\u0440\u043e\u0432\u0435\u0441\u0442\u0438 \u0441\u043e\u0431\u0435\u0441\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u043e \u0432\u0441\u0435\u043c\u0438 \u043a\u0430\u043d\u0434\u0438\u0434\u0430\u0442\u0430\u043c\u0438 \u043d\u0430 \u0432\u0441\u0435 \u0434\u043e\u043b\u0436\u043d\u043e\u0441\u0442\u0438. \u0412 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0432\u0430\u043a\u0430\u043d\u0441\u0438\u0438 \u043e\u043d\u0430 \u043c\u043e\u0436\u0435\u0442 \u0434\u0435\u043b\u0435\u0433\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u044d\u0442\u0430\u043f\u044b \u0441\u043e\u0431\u0435\u0441\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0439 \u0440\u0430\u0437\u043d\u044b\u043c \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0430\u043c.<\/p>\n<p>  <\/p>\n<p><strong>\u0412\u043a\u0440\u0430\u0442\u0446\u0435<\/strong><\/p>\n<p>  <\/p>\n<p>\u042d\u0442\u043e \u0441\u043f\u043e\u0441\u043e\u0431 \u0434\u0435\u043b\u0435\u0433\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043b\u043e\u0433\u0438\u043a\u0438 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 (instantiation logic) \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u043c \u043a\u043b\u0430\u0441\u0441\u0430\u043c.<\/p>\n<p>  <\/p>\n<p><strong>\u0412\u0438\u043a\u0438\u043f\u0435\u0434\u0438\u044f<\/strong><\/p>\n<p>  <\/p>\n<blockquote><p>\u0412 \u043a\u043b\u0430\u0441\u0441\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 (class-based programming) \u0444\u0430\u0431\u0440\u0438\u0447\u043d\u044b\u043c \u043c\u0435\u0442\u043e\u0434\u043e\u043c \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u043f\u043e\u0440\u043e\u0436\u0434\u0430\u044e\u0449\u0438\u0439 \u0448\u0430\u0431\u043b\u043e\u043d \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044e\u0449\u0438\u0439 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044e\u0449\u0438\u0435 \u043c\u0435\u0442\u043e\u0434\u044b (factory method) \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0431\u0435\u0437 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u043d\u0438\u0445 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432. \u041e\u0431\u044a\u0435\u043a\u0442\u044b \u0441\u043e\u0437\u0434\u0430\u044e\u0442\u0441\u044f \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u0432\u044b\u0437\u043e\u0432\u0430 \u043d\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430, \u0430 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u044e\u0449\u0435\u0433\u043e \u043c\u0435\u0442\u043e\u0434\u0430, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0433\u043e \u0432 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435 \u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u043c\u0438 \u043a\u043b\u0430\u0441\u0441\u0430\u043c\u0438 \u043b\u0438\u0431\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u0433\u043e \u0432 \u0431\u0430\u0437\u043e\u0432\u043e\u043c \u043a\u043b\u0430\u0441\u0441\u0435 \u0438, \u043e\u043f\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e, \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0433\u043e (overridden) \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u044b\u043c\u0438 \u043a\u043b\u0430\u0441\u0441\u0430\u043c\u0438 (derived classes).<\/p><\/blockquote>\n<p><strong>\u041f\u0440\u0438\u043c\u0435\u0440<\/strong><\/p>\n<p>  <\/p>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0430, \u043f\u0440\u043e\u0432\u043e\u0434\u044f\u0449\u0435\u0433\u043e \u0441\u043e\u0431\u0435\u0441\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u0435, \u0438 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u043d\u0435\u0433\u043e.<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">interface Interviewer {     public function askQuestions(); }  class Developer implements Interviewer {     public function askQuestions()     {         echo 'Asking about design patterns!';     } }  class CommunityExecutive implements Interviewer {     public function askQuestions()     {         echo 'Asking about community building';     } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043a\u0430\u0434\u0440\u043e\u0432\u0438\u0447\u043a\u0443 <code>HiringManager<\/code>.<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">abstract class HiringManager {      \/\/ \u0424\u0430\u0431\u0440\u0438\u0447\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434     abstract public function makeInterviewer(): Interviewer;      public function takeInterview()     {         $interviewer = $this-&gt;makeInterviewer();         $interviewer-&gt;askQuestions();     } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041b\u044e\u0431\u043e\u0439 \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u0439 \u043a\u043b\u0430\u0441\u0441 \u043c\u043e\u0436\u0435\u0442 \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0442\u044c \u0435\u0433\u043e \u0438 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043d\u0443\u0436\u043d\u043e\u0433\u043e \u0441\u043e\u0431\u0435\u0441\u0435\u0434\u0443\u044e\u0449\u0435\u0433\u043e:<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">class DevelopmentManager extends HiringManager {     public function makeInterviewer(): Interviewer     {         return new Developer();     } }  class MarketingManager extends HiringManager {     public function makeInterviewer(): Interviewer     {         return new CommunityExecutive();     } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435:<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">$devManager = new DevelopmentManager(); $devManager-&gt;takeInterview(); \/\/ Output: \u0421\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 \u043e \u0448\u0430\u0431\u043b\u043e\u043d\u0430\u0445 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.  $marketingManager = new MarketingManager(); $marketingManager-&gt;takeInterview(); \/\/ Output: \u0421\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u0435\u0442 \u043e \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438 \u0441\u043e\u043e\u0431\u0449\u0435\u0441\u0442\u0432\u0430.<\/code><\/pre>\n<p>  <\/p>\n<p><strong>\u041a\u043e\u0433\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c?<\/strong><\/p>\n<p>  <\/p>\n<p>\u042d\u0442\u043e\u0442 \u0448\u0430\u0431\u043b\u043e\u043d \u043f\u043e\u043b\u0435\u0437\u0435\u043d \u0434\u043b\u044f \u043a\u0430\u043a\u0438\u0445-\u0442\u043e \u043e\u0431\u0449\u0438\u0445 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043e\u043a \u0432 \u043a\u043b\u0430\u0441\u0441\u0435, \u043d\u043e \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u044b\u0435 \u043f\u043e\u0434\u043a\u043b\u0430\u0441\u0441\u044b \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0442\u0441\u044f \u0432 \u0445\u043e\u0434\u0435 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f (runtime). \u0422\u043e \u0435\u0441\u0442\u044c \u043a\u043e\u0433\u0434\u0430 \u043a\u043b\u0438\u0435\u043d\u0442 \u043d\u0435 \u0437\u043d\u0430\u0435\u0442, \u043a\u0430\u043a\u043e\u0439 \u0438\u043c\u0435\u043d\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u0430\u0441\u0441 \u043c\u043e\u0436\u0435\u0442 \u0435\u043c\u0443 \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u0438\u0442\u044c\u0441\u044f.<\/p>\n<p>  <\/p>\n<h3 id=\"imagehttpshabrastorageorgfilesa079a0c34a079a0c348ef4f79b4fe7ac190407f3epng-abstraktnaya-fabrika\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/a07\/9a0\/c34\/a079a0c348ef4f79b4fe7ac190407f3e.png\" alt=\"image\"\/> \u0410\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u0430\u044f \u0444\u0430\u0431\u0440\u0438\u043a\u0430<\/h3>\n<p>  <\/p>\n<p><strong>\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u044f <\/strong><\/p>\n<p>  <\/p>\n<p>\u0412\u0435\u0440\u043d\u0451\u043c\u0441\u044f \u043a \u043f\u0440\u0438\u043c\u0435\u0440\u0443 \u0441 \u0434\u0432\u0435\u0440\u044f\u043c\u0438 \u0438\u0437 \u00ab\u041f\u0440\u043e\u0441\u0442\u043e\u0439 \u0444\u0430\u0431\u0440\u0438\u043a\u0438\u00bb. \u0412 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0441\u0432\u043e\u0438\u0445 \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u0435\u0439 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u043a\u0443\u043f\u0438\u0442\u044c \u0434\u0435\u0440\u0435\u0432\u044f\u043d\u043d\u0443\u044e \u0434\u0432\u0435\u0440\u044c \u0432 \u043e\u0434\u043d\u043e\u043c \u043c\u0430\u0433\u0430\u0437\u0438\u043d\u0435, \u0441\u0442\u0430\u043b\u044c\u043d\u0443\u044e \u2014 \u0432 \u0434\u0440\u0443\u0433\u043e\u043c, \u043f\u043b\u0430\u0441\u0442\u0438\u043a\u043e\u0432\u0443\u044e \u2014 \u0432 \u0442\u0440\u0435\u0442\u044c\u0435\u043c. \u0414\u043b\u044f \u043c\u043e\u043d\u0442\u0430\u0436\u0430 \u0432\u0430\u043c \u043f\u043e\u043d\u0430\u0434\u043e\u0431\u044f\u0442\u0441\u044f \u0440\u0430\u0437\u043d\u044b\u0435 \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u044b: \u0434\u0435\u0440\u0435\u0432\u044f\u043d\u043d\u043e\u0439 \u0434\u0432\u0435\u0440\u0438 \u043d\u0443\u0436\u0435\u043d \u043f\u043b\u043e\u0442\u043d\u0438\u043a, \u0441\u0442\u0430\u043b\u044c\u043d\u043e\u0439 \u2014 \u0441\u0432\u0430\u0440\u0449\u0438\u043a, \u043f\u043b\u0430\u0441\u0442\u0438\u043a\u043e\u0432\u043e\u0439 \u2014 \u0441\u043f\u0435\u0446 \u043f\u043e \u041f\u0412\u0425-\u043f\u0440\u043e\u0444\u0438\u043b\u044f\u043c.<\/p>\n<p>  <\/p>\n<p><strong>\u0412\u043a\u0440\u0430\u0442\u0446\u0435<\/strong><br \/>  \u042d\u0442\u043e \u0444\u0430\u0431\u0440\u0438\u043a\u0430 \u0444\u0430\u0431\u0440\u0438\u043a. \u0422\u043e \u0435\u0441\u0442\u044c \u0444\u0430\u0431\u0440\u0438\u043a\u0430, \u0433\u0440\u0443\u043f\u043f\u0438\u0440\u0443\u044e\u0449\u0430\u044f \u0438\u043d\u0434\u0438\u0432\u0438\u0434\u0443\u0430\u043b\u044c\u043d\u044b\u0435, \u043d\u043e \u0432\u0437\u0430\u0438\u043c\u043e\u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435\/\u0432\u0437\u0430\u0438\u043c\u043e\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u044b\u0435 \u0444\u0430\u0431\u0440\u0438\u043a\u0438 \u0431\u0435\u0437 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u043d\u0438\u0445 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432.<\/p>\n<p>  <\/p>\n<p><strong>\u0412\u0438\u043a\u0438\u043f\u0435\u0434\u0438\u044f<\/strong><\/p>\n<p>  <\/p>\n<blockquote><p>\u0428\u0430\u0431\u043b\u043e\u043d \u00ab\u0410\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u0430\u044f \u0444\u0430\u0431\u0440\u0438\u043a\u0430\u00bb \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u0441\u043f\u043e\u0441\u043e\u0431 \u0438\u043d\u043a\u0430\u043f\u0441\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0433\u0440\u0443\u043f\u043f\u044b \u0438\u043d\u0434\u0438\u0432\u0438\u0434\u0443\u0430\u043b\u044c\u043d\u044b\u0445 \u0444\u0430\u0431\u0440\u0438\u043a, \u043e\u0431\u044a\u0435\u0434\u0438\u043d\u0451\u043d\u043d\u044b\u0445 \u043d\u0435\u043a\u043e\u0439 \u0442\u0435\u043c\u043e\u0439, \u0431\u0435\u0437 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u044f \u0434\u043b\u044f \u043d\u0438\u0445 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432.<\/p><\/blockquote>\n<p><strong>\u041f\u0440\u0438\u043c\u0435\u0440<\/strong><\/p>\n<p>  <\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 Door \u0438 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0439 \u0434\u043b\u044f \u043d\u0435\u0433\u043e.<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">interface Door {     public function getDescription(); }  class WoodenDoor implements Door {     public function getDescription()     {         echo 'I am a wooden door';     } }  class IronDoor implements Door {     public function getDescription()     {         echo 'I am an iron door';     } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u044b \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u044b \u043f\u043e \u0443\u0441\u0442\u0430\u043d\u043e\u0432\u043a\u0435 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0432\u0438\u0434\u0430 \u0434\u0432\u0435\u0440\u0435\u0439.<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">interface DoorFittingExpert {     public function getDescription(); }  class Welder implements DoorFittingExpert {     public function getDescription()     {         echo 'I can only fit iron doors';     } }  class Carpenter implements DoorFittingExpert {     public function getDescription()     {         echo 'I can only fit wooden doors';     } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043b\u0438 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0442\u043d\u0443\u044e \u0444\u0430\u0431\u0440\u0438\u043a\u0443, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0441\u0435\u043c\u0435\u0439\u0441\u0442\u0432\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0438\u043b\u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b. \u0422\u043e \u0435\u0441\u0442\u044c \u0444\u0430\u0431\u0440\u0438\u043a\u0430 \u0434\u0435\u0440\u0435\u0432\u044f\u043d\u043d\u044b\u0445 \u0434\u0432\u0435\u0440\u0435\u0439 \u0441\u043e\u0437\u0434\u0430\u0441\u0442 \u0434\u0435\u0440\u0435\u0432\u044f\u043d\u043d\u0443\u044e \u0434\u0432\u0435\u0440\u044c \u0438 \u0447\u0435\u043b\u043e\u0432\u0435\u043a\u0430 \u0434\u043b\u044f \u0435\u0451 \u043c\u043e\u043d\u0442\u0430\u0436\u0430, \u0444\u0430\u0431\u0440\u0438\u043a\u0430 \u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0434\u0432\u0435\u0440\u0435\u0439 \u2014 \u0441\u0442\u0430\u043b\u044c\u043d\u0443\u044e \u0434\u0432\u0435\u0440\u044c \u0438 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u0430 \u0438 \u0442. \u0434.<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">interface DoorFactory {     public function makeDoor(): Door;     public function makeFittingExpert(): DoorFittingExpert; }  \/\/ \u0424\u0430\u0431\u0440\u0438\u043a\u0430 \u0434\u0435\u0440\u0435\u0432\u044f\u043d\u043d\u044b\u0445 \u0434\u0432\u0435\u0440\u0435\u0439 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u043f\u043b\u043e\u0442\u043d\u0438\u043a\u0430 \u0438 \u0434\u0435\u0440\u0435\u0432\u044f\u043d\u043d\u0443\u044e \u0434\u0432\u0435\u0440\u044c class WoodenDoorFactory implements DoorFactory {     public function makeDoor(): Door     {         return new WoodenDoor();     }      public function makeFittingExpert(): DoorFittingExpert     {         return new Carpenter();     } }  \/\/ \u0424\u0430\u0431\u0440\u0438\u043a\u0430 \u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0434\u0432\u0435\u0440\u0435\u0439 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u0435\u0442 \u0441\u0442\u0430\u043b\u044c\u043d\u0443\u044e \u0434\u0432\u0435\u0440\u044c \u0438 \u0441\u0432\u0430\u0440\u0449\u0438\u043a\u0430 class IronDoorFactory implements DoorFactory {     public function makeDoor(): Door     {         return new IronDoor();     }      public function makeFittingExpert(): DoorFittingExpert     {         return new Welder();     } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435:<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">$woodenFactory = new WoodenDoorFactory();  $door = $woodenFactory-&gt;makeDoor(); $expert = $woodenFactory-&gt;makeFittingExpert();  $door-&gt;getDescription();  \/\/ Output: \u042f \u0434\u0435\u0440\u0435\u0432\u044f\u043d\u043d\u0430\u044f \u0434\u0432\u0435\u0440\u044c $expert-&gt;getDescription(); \/\/ Output: \u042f \u043c\u043e\u0433\u0443 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0434\u0435\u0440\u0435\u0432\u044f\u043d\u043d\u044b\u0435 \u0434\u0432\u0435\u0440\u0438  \/\/ Same for Iron Factory $ironFactory = new IronDoorFactory();  $door = $ironFactory-&gt;makeDoor(); $expert = $ironFactory-&gt;makeFittingExpert();  $door-&gt;getDescription();  \/\/ Output: \u042f \u0441\u0442\u0430\u043b\u044c\u043d\u0430\u044f \u0434\u0432\u0435\u0440\u044c $expert-&gt;getDescription(); \/\/ Output: \u042f \u043c\u043e\u0433\u0443 \u0443\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0434\u0432\u0435\u0440\u0438<\/code><\/pre>\n<p>  <\/p>\n<p>\u0417\u0434\u0435\u0441\u044c \u0444\u0430\u0431\u0440\u0438\u043a\u0430 \u0434\u0435\u0440\u0435\u0432\u044f\u043d\u043d\u044b\u0445 \u0434\u0432\u0435\u0440\u0435\u0439 \u0438\u043d\u043a\u0430\u043f\u0441\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u043b\u0430 <code>carpenter<\/code> \u0438 <code>wooden door<\/code>, \u0444\u0430\u0431\u0440\u0438\u043a\u0430 \u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0445 \u0434\u0432\u0435\u0440\u0435\u0439 \u2014 <code>iron door<\/code> and <code>welder<\/code>. \u0422\u043e \u0435\u0441\u0442\u044c \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u0442\u044c \u0443\u0432\u0435\u0440\u0435\u043d\u043d\u044b\u043c\u0438, \u0447\u0442\u043e \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0438\u0437 \u0441\u043e\u0437\u0434\u0430\u043d\u043d\u044b\u0445 \u0434\u0432\u0435\u0440\u0435\u0439 \u043c\u044b \u043f\u043e\u043b\u0443\u0447\u0438\u043c \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e\u0433\u043e \u0441\u043f\u0435\u0446\u0438\u0430\u043b\u0438\u0441\u0442\u0430.<\/p>\n<p>  <\/p>\n<p><strong>\u041a\u043e\u0433\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c?<\/strong><\/p>\n<p>  <\/p>\n<p>\u041a\u043e\u0433\u0434\u0430 \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u0432\u0437\u0430\u0438\u043c\u043e\u0441\u0432\u044f\u0437\u0438 \u0441 \u043d\u0435 \u0441\u0430\u043c\u043e\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u043b\u043e\u0433\u0438\u043a\u043e\u0439 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f (creation logic).<\/p>\n<p>  <\/p>\n<h3 id=\"imagehttpshabrastorageorgfiles301beff6b301beff6b71b4be18c4ab10aaabb464fpng-stroitel\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/301\/bef\/f6b\/301beff6b71b4be18c4ab10aaabb464f.png\" alt=\"image\"\/> \u0421\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u044c<\/h3>\n<p>  <\/p>\n<p><strong>\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u044f<\/strong><\/p>\n<p>  <\/p>\n<p>\u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0432\u044b \u043f\u0440\u0438\u0448\u043b\u0438 \u0432 \u0437\u0430\u0431\u0435\u0433\u0430\u043b\u043e\u0432\u043a\u0443, \u0437\u0430\u043a\u0430\u0437\u0430\u043b\u0438 \u0431\u0443\u0440\u0433\u0435\u0440 \u0434\u043d\u044f, \u0438 \u0432\u0430\u043c \u0432\u044b\u0434\u0430\u043b\u0438 \u0435\u0433\u043e <strong>\u0431\u0435\u0437 \u0432\u043e\u043f\u0440\u043e\u0441\u043e\u0432<\/strong>. \u042d\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u0440 \u00ab\u041f\u0440\u043e\u0441\u0442\u043e\u0439 \u0444\u0430\u0431\u0440\u0438\u043a\u0438\u00bb. \u041d\u043e \u0438\u043d\u043e\u0433\u0434\u0430 \u043b\u043e\u0433\u0438\u043a\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0431\u043e\u043b\u044c\u0448\u0435\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u0448\u0430\u0433\u043e\u0432. \u041a \u043f\u0440\u0438\u043c\u0435\u0440\u0443, \u043f\u0440\u0438 \u0437\u0430\u043a\u0430\u0437\u0435 \u0431\u0443\u0440\u0433\u0435\u0440\u0430 \u0434\u043d\u044f \u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0430\u0440\u0438\u0430\u043d\u0442\u043e\u0432 \u0445\u043b\u0435\u0431\u0430, \u043d\u0430\u0447\u0438\u043d\u043a\u0438, \u0441\u043e\u0443\u0441\u043e\u0432, \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0438\u043d\u0433\u0440\u0435\u0434\u0438\u0435\u043d\u0442\u043e\u0432. \u0412 \u0442\u0430\u043a\u0438\u0445 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f\u0445 \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0448\u0430\u0431\u043b\u043e\u043d \u00ab\u0421\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u044c\u00bb.<\/p>\n<p>  <\/p>\n<p><strong>\u0412\u043a\u0440\u0430\u0442\u0446\u0435<\/strong><\/p>\n<p>  <\/p>\n<p>\u0428\u0430\u0431\u043b\u043e\u043d \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0440\u0430\u0437\u043d\u044b\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u0438\u0437\u0431\u0435\u0433\u0430\u044f \u0437\u0430\u0433\u0440\u044f\u0437\u043d\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u0430 (constructor pollution). \u042d\u0442\u043e \u043f\u043e\u043b\u0435\u0437\u043d\u043e, \u043a\u043e\u0433\u0434\u0430 \u0443 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432. \u0418\u043b\u0438 \u043a\u043e\u0433\u0434\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0431\u043e\u043b\u044c\u0448\u043e\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u044d\u0442\u0430\u043f\u043e\u0432.<\/p>\n<p>  <\/p>\n<p><strong>\u0412\u0438\u043a\u0438\u043f\u0435\u0434\u0438\u044f<\/strong><\/p>\n<p>  <\/p>\n<blockquote><p>\u0428\u0430\u0431\u043b\u043e\u043d \u00ab\u0421\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u044c\u00bb \u043f\u0440\u0435\u0434\u043d\u0430\u0437\u043d\u0430\u0447\u0435\u043d \u0434\u043b\u044f \u043f\u043e\u0438\u0441\u043a\u0430 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0430\u043d\u0442\u0438\u043f\u0430\u0442\u0442\u0435\u0440\u043d\u0430 Telescoping constructor.<\/p><\/blockquote>\n<p>\u041f\u043e\u044f\u0441\u043d\u044e, \u0447\u0442\u043e \u0442\u0430\u043a\u043e\u0435 \u0430\u043d\u0442\u0438\u043f\u0430\u0442\u0442\u0435\u0440\u043d Telescoping constructor. \u041a\u0430\u0436\u0434\u044b\u0439 \u0438\u0437 \u043d\u0430\u0441 \u043a\u043e\u0433\u0434\u0430-\u043b\u0438\u0431\u043e \u0441\u0442\u0430\u043b\u043a\u0438\u0432\u0430\u043b\u0441\u044f \u0441 \u043f\u043e\u0434\u043e\u0431\u043d\u044b\u043c \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440\u043e\u043c: <\/p>\n<p>  <\/p>\n<pre><code class=\"php\">public function __construct($size, $cheese = true, $pepperoni = true, $tomato = false, $lettuce = true) { }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041a\u0430\u043a \u0432\u0438\u0434\u0438\u0442\u0435, \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u043e \u0440\u0430\u0437\u0440\u0430\u0441\u0442\u0438\u0441\u044c, \u0438 \u0441\u0442\u0430\u043d\u0435\u0442 \u0442\u0440\u0443\u0434\u043d\u043e \u0440\u0430\u0437\u043e\u0431\u0440\u0430\u0442\u044c\u0441\u044f \u0432 \u0438\u0445 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0435. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u044d\u0442\u043e\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u0431\u0443\u0434\u0435\u0442 \u0440\u0430\u0441\u0442\u0438 \u0438 \u0434\u0430\u043b\u044c\u0448\u0435, \u0435\u0441\u043b\u0438 \u0432 \u0431\u0443\u0434\u0443\u0449\u0435\u043c \u0432\u044b \u0437\u0430\u0445\u043e\u0442\u0438\u0442\u0435 \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u043e\u043f\u0446\u0438\u0438. \u042d\u0442\u043e \u0438 \u0435\u0441\u0442\u044c \u0430\u043d\u0442\u0438\u043f\u0430\u0442\u0442\u0435\u0440\u043d Telescoping constructor.<\/p>\n<p>  <\/p>\n<p><strong>\u041f\u0440\u0438\u043c\u0435\u0440<\/strong><\/p>\n<p>  <\/p>\n<p>\u0420\u0430\u0437\u0443\u043c\u043d\u0430\u044f \u0430\u043b\u044c\u0442\u0435\u0440\u043d\u0430\u0442\u0438\u0432\u0430 \u2014 \u0448\u0430\u0431\u043b\u043e\u043d \u00ab\u0421\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u044c\u00bb. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0431\u0443\u0440\u0433\u0435\u0440:<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">class Burger {     protected $size;      protected $cheese = false;     protected $pepperoni = false;     protected $lettuce = false;     protected $tomato = false;      public function __construct(BurgerBuilder $builder)     {         $this-&gt;size = $builder-&gt;size;         $this-&gt;cheese = $builder-&gt;cheese;         $this-&gt;pepperoni = $builder-&gt;pepperoni;         $this-&gt;lettuce = $builder-&gt;lettuce;         $this-&gt;tomato = $builder-&gt;tomato;     } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0410 \u0437\u0430\u0442\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u043c \u00ab\u0441\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u044f\u00bb:<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">class BurgerBuilder {     public $size;      public $cheese = false;     public $pepperoni = false;     public $lettuce = false;     public $tomato = false;      public function __construct(int $size)     {         $this-&gt;size = $size;     }      public function addPepperoni()     {         $this-&gt;pepperoni = true;         return $this;     }      public function addLettuce()     {         $this-&gt;lettuce = true;         return $this;     }      public function addCheese()     {         $this-&gt;cheese = true;         return $this;     }      public function addTomato()     {         $this-&gt;tomato = true;         return $this;     }      public function build(): Burger     {         return new Burger($this);     } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435:<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">$burger = (new BurgerBuilder(14))                     -&gt;addPepperoni()                     -&gt;addLettuce()                     -&gt;addTomato()                     -&gt;build();<\/code><\/pre>\n<p>  <\/p>\n<p><strong>\u041a\u043e\u0433\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c?<\/strong><\/p>\n<p>  <\/p>\n<p>\u041a\u043e\u0433\u0434\u0430 \u0443 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0441\u0432\u043e\u0439\u0441\u0442\u0432 \u0438 \u043a\u043e\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u043e \u0438\u0437\u0431\u0435\u0436\u0430\u0442\u044c Telescoping constructor. \u041a\u043b\u044e\u0447\u0435\u0432\u043e\u0435 \u043e\u0442\u043b\u0438\u0447\u0438\u0435 \u043e\u0442 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u00ab\u041f\u0440\u043e\u0441\u0442\u0430\u044f \u0444\u0430\u0431\u0440\u0438\u043a\u0430\u00bb: \u043e\u043d \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0432 \u043e\u0434\u043d\u043e\u044d\u0442\u0430\u043f\u043d\u043e\u043c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0438, \u0430 \u00ab\u0421\u0442\u0440\u043e\u0438\u0442\u0435\u043b\u044c\u00bb \u2014 \u0432 \u043c\u043d\u043e\u0433\u043e\u044d\u0442\u0430\u043f\u043d\u043e\u043c.<\/p>\n<p>  <\/p>\n<h3 id=\"imagehttpshabrastorageorgfilesa730be6c4a730be6c433647d3af9858e505876141png-prototip\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/a73\/0be\/6c4\/a730be6c433647d3af9858e505876141.png\" alt=\"image\"\/> \u041f\u0440\u043e\u0442\u043e\u0442\u0438\u043f<\/h3>\n<p>  <\/p>\n<p><strong>\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u044f <\/strong><\/p>\n<p>  <\/p>\n<p>\u041f\u043e\u043c\u043d\u0438\u0442\u0435 \u043a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u0443\u044e \u043e\u0432\u0435\u0447\u043a\u0443 \u0414\u043e\u043b\u043b\u0438? \u0422\u0430\u043a \u0432\u043e\u0442, \u044d\u0442\u043e\u0442 \u0448\u0430\u0431\u043b\u043e\u043d \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u0430\u043a \u0440\u0430\u0437 \u043f\u043e\u0441\u0432\u044f\u0449\u0451\u043d \u043a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044e.<\/p>\n<p>  <\/p>\n<p><strong>\u0412\u043a\u0440\u0430\u0442\u0446\u0435<\/strong><\/p>\n<p>  <\/p>\n<p>\u041e\u0431\u044a\u0435\u043a\u0442 \u0441\u043e\u0437\u0434\u0430\u0451\u0442\u0441\u044f \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u043a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430.<\/p>\n<p>  <\/p>\n<p><strong>\u0412\u0438\u043a\u0438\u043f\u0435\u0434\u0438\u044f<\/strong><\/p>\n<p>  <\/p>\n<blockquote><p>\u0428\u0430\u0431\u043b\u043e\u043d \u00ab\u041f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u00bb \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u0442\u0438\u043f\u044b \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0442\u0441\u044f \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u043e\u043c-\u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u043e\u043c, \u043a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0434\u043b\u044f \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u044f \u043d\u043e\u0432\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432.<\/p><\/blockquote>\n<p>\u0422\u043e \u0435\u0441\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0434\u0443\u0431\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u0438 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043a\u043e\u043f\u0438\u044e \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u043f\u043e\u0442\u0440\u0435\u0431\u043d\u043e\u0441\u0442\u044f\u043c\u0438. \u0411\u0435\u0437 \u0437\u0430\u043c\u043e\u0440\u043e\u0447\u0435\u043a \u0441 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0441 \u043d\u0443\u043b\u044f \u0438 \u0435\u0433\u043e \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u043e\u0439.<\/p>\n<p>  <\/p>\n<p><strong>\u041f\u0440\u0438\u043c\u0435\u0440<\/strong><\/p>\n<p>  <\/p>\n<p>\u0412 PHP \u044d\u0442\u043e \u043b\u0435\u0433\u043a\u043e \u043c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e <code>clone<\/code>:<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">class Sheep {     protected $name;     protected $category;      public function __construct(string $name, string $category = 'Mountain Sheep')     {         $this-&gt;name = $name;         $this-&gt;category = $category;     }      public function setName(string $name)     {         $this-&gt;name = $name;     }      public function getName()     {         return $this-&gt;name;     }      public function setCategory(string $category)     {         $this-&gt;category = $category;     }      public function getCategory()     {         return $this-&gt;category;     } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0417\u0430\u0442\u0435\u043c \u043c\u043e\u0436\u043d\u043e \u043a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0442\u0430\u043a:<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">$original = new Sheep('Jolly'); echo $original-&gt;getName(); \/\/ \u0414\u0436\u043e\u043b\u043b\u0438 echo $original-&gt;getCategory(); \/\/ \u0413\u043e\u0440\u043d\u0430\u044f \u043e\u0432\u0435\u0447\u043a\u0430  \/\/ \u041a\u043b\u043e\u043d\u0438\u0440\u0443\u0439\u0442\u0435 \u0438 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0439\u0442\u0435, \u0447\u0442\u043e \u043d\u0443\u0436\u043d\u043e $cloned = clone $original; $cloned-&gt;setName('Dolly'); echo $cloned-&gt;getName(); \/\/ \u0414\u043e\u043b\u043b\u0438 echo $cloned-&gt;getCategory(); \/\/ \u0413\u043e\u0440\u043d\u0430\u044f \u043e\u0432\u0435\u0447\u043a\u0430<\/code><\/pre>\n<p>  <\/p>\n<p>\u0422\u0430\u043a\u0436\u0435 \u0434\u043b\u044f \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u043f\u0440\u043e\u0446\u0435\u0434\u0443\u0440\u044b \u043a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043c\u043e\u0436\u043d\u043e \u043e\u0431\u0440\u0430\u0442\u0438\u0442\u044c\u0441\u044f \u043a \u043c\u0430\u0433\u0438\u0447\u0435\u0441\u043a\u043e\u043c\u0443 \u043c\u0435\u0442\u043e\u0434\u0443 <code>__clone<\/code>.<\/p>\n<p>  <\/p>\n<p><strong>\u041a\u043e\u0433\u0434\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c?<\/strong><\/p>\n<p>  <\/p>\n<p>\u041a\u043e\u0433\u0434\u0430 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u0430\u043d\u0430\u043b\u043e\u0433\u0438\u0447\u0435\u043d \u0443\u0436\u0435 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u043c\u0443 \u0438\u043b\u0438 \u043a\u043e\u0433\u0434\u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u0441 \u043d\u0443\u043b\u044f \u0434\u043e\u0440\u043e\u0436\u0435 \u043a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p>  <\/p>\n<h3 id=\"imagehttpshabrastorageorgfiles46db1404e46db1404ea144dbf8b16073d5397698dpng-odinochka\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/46d\/b14\/04e\/46db1404ea144dbf8b16073d5397698d.png\" alt=\"image\"\/> \u041e\u0434\u0438\u043d\u043e\u0447\u043a\u0430<\/h3>\n<p>  <\/p>\n<p><strong>\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u044f <\/strong><\/p>\n<p>  <\/p>\n<p>\u0423 \u0441\u0442\u0440\u0430\u043d\u044b \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0442\u043e\u043b\u044c\u043a\u043e \u043e\u0434\u0438\u043d \u043f\u0440\u0435\u0437\u0438\u0434\u0435\u043d\u0442. \u041e\u043d \u0434\u043e\u043b\u0436\u0435\u043d \u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c, \u043a\u043e\u0433\u0434\u0430 \u0442\u043e\u0433\u043e \u0442\u0440\u0435\u0431\u0443\u044e\u0442 \u043e\u0431\u0441\u0442\u043e\u044f\u0442\u0435\u043b\u044c\u0441\u0442\u0432\u0430 \u0438 \u0434\u043e\u043b\u0433. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u043f\u0440\u0435\u0437\u0438\u0434\u0435\u043d\u0442 \u2014 \u043e\u0434\u0438\u043d\u043e\u0447\u043a\u0430.<\/p>\n<p>  <\/p>\n<p><strong>\u0412\u043a\u0440\u0430\u0442\u0446\u0435<\/strong><\/p>\n<p>  <\/p>\n<p>\u0428\u0430\u0431\u043b\u043e\u043d \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0443\u0434\u043e\u0441\u0442\u043e\u0432\u0435\u0440\u0438\u0442\u044c\u0441\u044f, \u0447\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u2014 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0432 \u0441\u0432\u043e\u0451\u043c \u043a\u043b\u0430\u0441\u0441\u0435.<\/p>\n<p>  <\/p>\n<p><strong>\u0412\u0438\u043a\u0438\u043f\u0435\u0434\u0438\u044f<\/strong><\/p>\n<p>  <\/p>\n<blockquote><p>\u0428\u0430\u0431\u043b\u043e\u043d \u00ab\u041e\u0434\u0438\u043d\u043e\u0447\u043a\u0430\u00bb \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0438\u0432\u0430\u0442\u044c \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u0430 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c. \u042d\u0442\u043e \u0443\u0434\u043e\u0431\u043d\u043e, \u043a\u043e\u0433\u0434\u0430 \u0434\u043b\u044f \u043a\u043e\u043e\u0440\u0434\u0438\u043d\u0430\u0446\u0438\u0438 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439 \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f, \u0447\u0442\u043e\u0431\u044b \u043e\u0431\u044a\u0435\u043a\u0442 \u0431\u044b\u043b \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u043c \u0432 \u0441\u0432\u043e\u0451\u043c \u043a\u043b\u0430\u0441\u0441\u0435.<\/p><\/blockquote>\n<p>\u041d\u0430 \u0441\u0430\u043c\u043e\u043c \u0434\u0435\u043b\u0435 \u0448\u0430\u0431\u043b\u043e\u043d \u00ab\u041e\u0434\u0438\u043d\u043e\u0447\u043a\u0430\u00bb \u0441\u0447\u0438\u0442\u0430\u0435\u0442\u0441\u044f \u0430\u043d\u0442\u0438\u043f\u0430\u0442\u0442\u0435\u0440\u043d\u043e\u043c, \u043d\u0435 \u0441\u043b\u0435\u0434\u0443\u0435\u0442 \u0438\u043c \u0441\u043b\u0438\u0448\u043a\u043e\u043c \u0443\u0432\u043b\u0435\u043a\u0430\u0442\u044c\u0441\u044f. \u041e\u043d \u043d\u0435\u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u043f\u043b\u043e\u0445 \u0438 \u0438\u043d\u043e\u0433\u0434\u0430 \u0431\u044b\u0432\u0430\u0435\u0442 \u043f\u043e\u043b\u0435\u0437\u0435\u043d. \u041d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0439\u0442\u0435 \u0435\u0433\u043e \u0441 \u043e\u0441\u0442\u043e\u0440\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u00ab\u041e\u0434\u0438\u043d\u043e\u0447\u043a\u0430\u00bb \u0432\u043d\u043e\u0441\u0438\u0442 \u0432 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0433\u043b\u043e\u0431\u0430\u043b\u044c\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u0442\u0430\u043a \u0447\u0442\u043e \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0435 \u0432 \u043e\u0434\u043d\u043e\u043c \u043c\u0435\u0441\u0442\u0435 \u043c\u043e\u0436\u0435\u0442 \u043f\u043e\u0432\u043b\u0438\u044f\u0442\u044c \u043d\u0430 \u0432\u0441\u0435 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u0441\u043b\u0443\u0447\u0430\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f, \u0430 \u043e\u0442\u043b\u0430\u0436\u0438\u0432\u0430\u0442\u044c \u0442\u0430\u043a\u043e\u0435 \u2014 \u043d\u0435 \u0441\u0430\u043c\u043e\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u0437\u0430\u043d\u044f\u0442\u0438\u0435. \u0414\u0440\u0443\u0433\u0438\u0435 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u0430: \u043e\u043d \u0434\u0435\u043b\u0430\u0435\u0442 \u0432\u0430\u0448 \u043a\u043e\u0434 \u0441\u0438\u043b\u044c\u043d\u043e \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u043c (tightly coupled), \u0430 \u0441\u043e\u0437\u0434\u0430\u043d\u0438\u0435 \u043f\u0440\u043e\u0442\u043e\u0442\u0438\u043f\u0430 (mocking) \u00ab\u041e\u0434\u0438\u043d\u043e\u0447\u043a\u0438\u00bb \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0437\u0430\u0442\u0440\u0443\u0434\u043d\u0435\u043d\u043e.<\/p>\n<p>  <\/p>\n<p><strong>\u041f\u0440\u0438\u043c\u0435\u0440<\/strong><\/p>\n<p>  <\/p>\n<p>\u0421\u0434\u0435\u043b\u0430\u0439\u0442\u0435 \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440 \u043f\u0440\u0438\u0432\u0430\u0442\u043d\u044b\u043c, \u043e\u0442\u043a\u043b\u044e\u0447\u0438\u0442\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u044f \u0438 \u0441\u043e\u0437\u0434\u0430\u0439\u0442\u0435 \u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0443\u044e \u043f\u0435\u0440\u0435\u043c\u0435\u043d\u043d\u0443\u044e \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440\u0430:<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">final class President {     private static $instance;      private function __construct()     {         \/\/ \u041f\u0440\u044f\u0447\u0435\u043c \u043a\u043e\u043d\u0441\u0442\u0440\u0443\u043a\u0442\u043e\u0440     }      public static function getInstance(): President     {         if (!self:$instance) {             self:$instance = new self();         }          return self:$instance;     }      private function __clone()     {         \/\/ \u041e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u043a\u043b\u043e\u043d\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435     }      private function __wakeup()     {         \/\/ \u041e\u0442\u043a\u043b\u044e\u0447\u0430\u0435\u043c \u0434\u0435\u0441\u0435\u0440\u0438\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e     } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435:<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">$president1 = President:getInstance(); $president2 = President:getInstance();  var_dump($president1 === $president2); \/\/ true<\/code><\/pre>\n<p>  <\/p>\n<h2 id=\"strukturnye-shablony-proektirovaniya\">\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u044b\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/h2>\n<p>  <\/p>\n<p><strong>\u0412\u043a\u0440\u0430\u0442\u0446\u0435<\/strong><\/p>\n<p>  <\/p>\n<p>\u042d\u0442\u0438 \u0448\u0430\u0431\u043b\u043e\u043d\u044b \u0432 \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u043c \u043f\u043e\u0441\u0432\u044f\u0449\u0435\u043d\u044b \u043a\u043e\u043c\u043f\u043e\u043d\u043e\u0432\u043a\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 (object composition). \u0422\u043e \u0435\u0441\u0442\u044c \u0442\u043e\u043c\u0443, \u043a\u0430\u043a \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u0438 \u043c\u043e\u0433\u0443\u0442 \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0430 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c. \u0415\u0449\u0451 \u043e\u0434\u043d\u043e \u043e\u0431\u044a\u044f\u0441\u043d\u0435\u043d\u0438\u0435: \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u044b\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u044b \u043f\u043e\u043c\u043e\u0433\u0430\u044e\u0442 \u043e\u0442\u0432\u0435\u0442\u0438\u0442\u044c \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441 \u00ab\u041a\u0430\u043a \u043f\u043e\u0441\u0442\u0440\u043e\u0438\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0439 \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442?\u00bb<\/p>\n<p>  <\/p>\n<p><strong>\u0412\u0438\u043a\u0438\u043f\u0435\u0434\u0438\u044f<\/strong><\/p>\n<p>  <\/p>\n<blockquote><p>\u0421\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u044b\u043c\u0438 \u043d\u0430\u0437\u044b\u0432\u0430\u044e\u0442 \u0448\u0430\u0431\u043b\u043e\u043d\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u0431\u043b\u0435\u0433\u0447\u0430\u044e\u0442 \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044f \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0441\u043f\u043e\u0441\u043e\u0431 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u043e\u0442\u043d\u043e\u0448\u0435\u043d\u0438\u0439 \u043c\u0435\u0436\u0434\u0443 \u0441\u0443\u0449\u043d\u043e\u0441\u0442\u044f\u043c\u0438.<\/p><\/blockquote>\n<p>  <\/p>\n<ul>\n<li><a href=\"https:\/\/habrahabr.ru\/company\/mailru\/blog\/325492\/#imagehttpshabrastorageorgfiles08bbdb0a708bbdb0a740d4129bea4f8fe9456e0d0png-adapter\">\u0410\u0434\u0430\u043f\u0442\u0435\u0440<\/a><\/li>\n<li><a href=\"https:\/\/habrahabr.ru\/company\/mailru\/blog\/325492\/#imagehttpshabrastorageorgfiles5730de7ab5730de7abc284e128bce7c4e5ea64913png-most\">\u041c\u043e\u0441\u0442<\/a><\/li>\n<li><a href=\"https:\/\/habrahabr.ru\/company\/mailru\/blog\/325492\/#imagehttpshabrastorageorgfiles899fb76f3899fb76f3bbc4489a71f36d4c0b190f8png-komponovschik\">\u041a\u043e\u043c\u043f\u043e\u043d\u043e\u0432\u0449\u0438\u043a<\/a><\/li>\n<li><a href=\"https:\/\/habrahabr.ru\/company\/mailru\/blog\/325492\/#imagehttpshabrastorageorgfiles1d6a22eff1d6a22eff4b047e691417f69f37647f5png-dekorator\">\u0414\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440<\/a><\/li>\n<li><a href=\"https:\/\/habrahabr.ru\/company\/mailru\/blog\/325492\/#imagehttpshabrastorageorgfilesc1feaf9e9c1feaf9e90c0486fb48479326557424apng-fasad\">\u0424\u0430\u0441\u0430\u0434<\/a><\/li>\n<li><a href=\"https:\/\/habrahabr.ru\/company\/mailru\/blog\/325492\/#imagehttpshabrastorageorgfilese17d114ebe17d114eb9d645c7ab57f590a1aea3b3png-prisposoblenec\">\u041f\u0440\u0438\u0441\u043f\u043e\u0441\u043e\u0431\u043b\u0435\u043d\u0435\u0446<\/a><\/li>\n<li><a href=\"https:\/\/habrahabr.ru\/company\/mailru\/blog\/325492\/#imagehttpshabrastorageorgfilesa8ed1e294a8ed1e294f2842a0b4d066c471905962png-zamestitel\">\u0417\u0430\u043c\u0435\u0441\u0442\u0438\u0442\u0435\u043b\u044c<\/a><\/li>\n<\/ul>\n<p>  <\/p>\n<h3 id=\"imagehttpshabrastorageorgfiles08bbdb0a708bbdb0a740d4129bea4f8fe9456e0d0png-adapter\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/08b\/bdb\/0a7\/08bbdb0a740d4129bea4f8fe9456e0d0.png\" alt=\"image\"\/> \u0410\u0434\u0430\u043f\u0442\u0435\u0440<\/h3>\n<p>  <\/p>\n<p><strong>\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u044f<\/strong><\/p>\n<p>  <\/p>\n<p>\u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0443 \u0432\u0430\u0441 \u043d\u0430 \u043a\u0430\u0440\u0442\u0435 \u043f\u0430\u043c\u044f\u0442\u0438 \u0435\u0441\u0442\u044c \u043a\u0430\u043a\u0438\u0435-\u0442\u043e \u043a\u0430\u0440\u0442\u0438\u043d\u043a\u0438. \u0418\u0445 \u043d\u0443\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043d\u0435\u0441\u0442\u0438 \u043d\u0430 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440. \u041d\u0443\u0436\u0435\u043d \u0430\u0434\u0430\u043f\u0442\u0435\u0440, \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u0439 \u0441 \u0432\u0445\u043e\u0434\u043d\u044b\u043c \u043f\u043e\u0440\u0442\u043e\u043c \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u043a\u0430\u0440\u0442\u0443 \u043f\u0430\u043c\u044f\u0442\u0438. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u0430\u0434\u0430\u043f\u0442\u0435\u0440 \u2014 \u044d\u0442\u043e \u043a\u0430\u0440\u0442\u0440\u0438\u0434\u0435\u0440. \u0415\u0449\u0451 \u043e\u0434\u0438\u043d \u043f\u0440\u0438\u043c\u0435\u0440: \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043d\u0438\u043a, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0430\u043c\u0435\u0440\u0438\u043a\u0430\u043d\u0441\u043a\u0438\u0439 \u0431\u043b\u043e\u043a \u043f\u0438\u0442\u0430\u043d\u0438\u044f \u0441 \u0440\u043e\u0441\u0441\u0438\u0439\u0441\u043a\u043e\u0439 \u0440\u043e\u0437\u0435\u0442\u043a\u043e\u0439. \u0422\u0440\u0435\u0442\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440: \u043f\u0435\u0440\u0435\u0432\u043e\u0434\u0447\u0438\u043a \u2014 \u044d\u0442\u043e \u0430\u0434\u0430\u043f\u0442\u0435\u0440, \u0441\u043e\u0435\u0434\u0438\u043d\u044f\u044e\u0449\u0438\u0439 \u0434\u0432\u0443\u0445 \u043b\u044e\u0434\u0435\u0439, \u0433\u043e\u0432\u043e\u0440\u044f\u0449\u0438\u0445 \u043d\u0430 \u0440\u0430\u0437\u043d\u044b\u0445 \u044f\u0437\u044b\u043a\u0430\u0445.<\/p>\n<p>  <\/p>\n<p><strong>\u0412\u043a\u0440\u0430\u0442\u0446\u0435<\/strong><\/p>\n<p>  <\/p>\n<p>\u0428\u0430\u0431\u043b\u043e\u043d \u00ab\u0410\u0434\u0430\u043f\u0442\u0435\u0440\u00bb \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u043e\u043c\u0435\u0449\u0430\u0442\u044c \u043d\u0435\u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u0432 \u043e\u0431\u0451\u0440\u0442\u043a\u0443, \u0447\u0442\u043e\u0431\u044b \u043e\u043d \u043e\u043a\u0430\u0437\u0430\u043b\u0441\u044f \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u044b\u043c \u0441 \u0434\u0440\u0443\u0433\u0438\u043c \u043a\u043b\u0430\u0441\u0441\u043e\u043c.<\/p>\n<p>  <\/p>\n<p><strong>\u0412\u0438\u043a\u0438\u043f\u0435\u0434\u0438\u044f<\/strong><\/p>\n<p>  <\/p>\n<blockquote><p>\u0428\u0430\u0431\u043b\u043e\u043d \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u00ab\u0410\u0434\u0430\u043f\u0442\u0435\u0440\u00bb \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0435\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u043a\u0430\u043a \u0434\u0440\u0443\u0433\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441. \u042d\u0442\u043e\u0442 \u0448\u0430\u0431\u043b\u043e\u043d \u0447\u0430\u0441\u0442\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f \u0440\u0430\u0431\u043e\u0442\u044b \u043e\u0434\u043d\u0438\u0445 \u043a\u043b\u0430\u0441\u0441\u043e\u0432 \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438 \u0431\u0435\u0437 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u0438\u0445 \u0438\u0441\u0445\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u0434\u0430.<\/p><\/blockquote>\n<p><strong>\u041f\u0440\u0438\u043c\u0435\u0440<\/strong><\/p>\n<p>  <\/p>\n<p>\u041f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u0438\u043c \u0441\u0435\u0431\u0435 \u043e\u0445\u043e\u0442\u043d\u0438\u043a\u0430 \u043d\u0430 \u043b\u044c\u0432\u043e\u0432.<\/p>\n<p>  <\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 <code>Lion<\/code>, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u0432\u0441\u0435 \u0442\u0438\u043f\u044b \u043b\u044c\u0432\u043e\u0432.<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">interface Lion {     public function roar(); }  class AfricanLion implements Lion {     public function roar()     {     } }  class AsianLion implements Lion {     public function roar()     {     } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041e\u0445\u043e\u0442\u043d\u0438\u043a \u0434\u043e\u043b\u0436\u0435\u043d \u043e\u0445\u043e\u0442\u0438\u0442\u044c\u0441\u044f \u043d\u0430 \u0432\u0441\u0435 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 <code>Lion<\/code>.<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">class Hunter {     public function hunt(Lion $lion)     {     } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0414\u043e\u0431\u0430\u0432\u0438\u043c \u0442\u0435\u043f\u0435\u0440\u044c \u0434\u0438\u043a\u0443\u044e \u0441\u043e\u0431\u0430\u043a\u0443 <code>WildDog<\/code>, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u0443\u044e \u043e\u0445\u043e\u0442\u043d\u0438\u043a \u0442\u043e\u0436\u0435 \u043c\u043e\u0436\u0435\u0442 \u043e\u0445\u043e\u0442\u0438\u0442\u044c\u0441\u044f. \u041d\u043e \u0443 \u043d\u0430\u0441 \u043d\u0435 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u044d\u0442\u043e \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e, \u043f\u043e\u0442\u043e\u043c\u0443 \u0447\u0442\u043e \u0443 \u0441\u043e\u0431\u0430\u043a\u0438 \u0434\u0440\u0443\u0433\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441. \u0427\u0442\u043e\u0431\u044b \u043e\u043d\u0430 \u0441\u0442\u0430\u043b\u0430 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u0430 \u0441 \u043e\u0445\u043e\u0442\u043d\u0438\u043a\u043e\u043c, \u043d\u0443\u0436\u043d\u043e \u0441\u043e\u0437\u0434\u0430\u0442\u044c \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u0430\u0434\u0430\u043f\u0442\u0435\u0440.<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">\/\/ \u042d\u0442\u043e \u043d\u0443\u0436\u043d\u043e \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c class WildDog {     public function bark()     {     } }  \/\/ \u0410\u0434\u0430\u043f\u0442\u0435\u0440 \u0432\u043e\u043a\u0440\u0443\u0433 \u0441\u043e\u0431\u0430\u043a\u0438 \u0441\u0434\u0435\u043b\u0430\u0435\u0442 \u0435\u0451 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0439 \u0441 \u043e\u0445\u043e\u0442\u043d\u0438\u043a\u043e\u043c class WildDogAdapter implements Lion {     protected $dog;      public function __construct(WildDog $dog)     {         $this-&gt;dog = $dog;     }      public function roar()     {         $this-&gt;dog-&gt;bark();     } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c <code>WildDog<\/code> \u043c\u043e\u0436\u0435\u0442 \u0432\u0441\u0442\u0443\u043f\u0438\u0442\u044c \u0432 \u0438\u0433\u0440\u0443 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435 \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f <code>WildDogAdapter<\/code>.<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">$wildDog = new WildDog(); $wildDogAdapter = new WildDogAdapter($wildDog);  $hunter = new Hunter(); $hunter-&gt;hunt($wildDogAdapter);<\/code><\/pre>\n<p>  <\/p>\n<h3 id=\"imagehttpshabrastorageorgfiles5730de7ab5730de7abc284e128bce7c4e5ea64913png-most\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/573\/0de\/7ab\/5730de7abc284e128bce7c4e5ea64913.png\" alt=\"image\"\/> \u041c\u043e\u0441\u0442<\/h3>\n<p>  <\/p>\n<p><strong>\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u044f<\/strong><\/p>\n<p>  <\/p>\n<p>\u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0443 \u0432\u0430\u0441 \u0435\u0441\u0442\u044c \u0441\u0430\u0439\u0442 \u0441 \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u043c\u0438 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\u043c\u0438. \u0412\u044b \u0445\u043e\u0442\u0438\u0442\u0435 \u043f\u043e\u0437\u0432\u043e\u043b\u0438\u0442\u044c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f\u043c \u043c\u0435\u043d\u044f\u0442\u044c \u0442\u0435\u043c\u044b \u043e\u0444\u043e\u0440\u043c\u043b\u0435\u043d\u0438\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446. \u041a\u0430\u043a \u0431\u044b \u0432\u044b \u043f\u043e\u0441\u0442\u0443\u043f\u0438\u043b\u0438? \u0421\u043e\u0437\u0434\u0430\u043b\u0438 \u043c\u043d\u043e\u0436\u0435\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0435 \u043a\u043e\u043f\u0438\u0438 \u043a\u0430\u0436\u0434\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0439 \u0442\u0435\u043c\u044b \u0438\u043b\u0438 \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u0442\u0435\u043c\u044b \u0438 \u043f\u043e\u0434\u0433\u0440\u0443\u0436\u0430\u043b\u0438 \u0438\u0445 \u0432 \u0441\u043e\u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0438\u0438 \u0441 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0430\u043c\u0438 \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0435\u0439? \u0428\u0430\u0431\u043b\u043e\u043d \u00ab\u041c\u043e\u0441\u0442\u00bb \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0432\u0442\u043e\u0440\u043e\u0439 \u043f\u043e\u0434\u0445\u043e\u0434.<\/p>\n<p>  <\/p>\n<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/693\/d31\/e70\/693d31e709f249bfab95520c182af6d6.jpg\" alt=\"image\"\/><\/p>\n<p>  <\/p>\n<p><strong>\u0412\u043a\u0440\u0430\u0442\u0446\u0435<\/strong><\/p>\n<p>  <\/p>\n<p>\u0428\u0430\u0431\u043b\u043e\u043d \u00ab\u041c\u043e\u0441\u0442\u00bb \u2014 \u044d\u0442\u043e \u043f\u0440\u0435\u0434\u043f\u043e\u0447\u0442\u0435\u043d\u0438\u0435 \u043a\u043e\u043c\u043f\u043e\u043d\u043e\u0432\u043a\u0438 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044e. \u041f\u043e\u0434\u0440\u043e\u0431\u043d\u043e\u0441\u0442\u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u0438\u0437 \u043e\u0434\u043d\u043e\u0439 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0438 \u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u043e\u0431\u044a\u0435\u043a\u0442\u0443 \u0441 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e\u0439 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0435\u0439.<\/p>\n<p>  <\/p>\n<p><strong>\u0412\u0438\u043a\u0438\u043f\u0435\u0434\u0438\u044f<\/strong><\/p>\n<p>  <\/p>\n<blockquote><p>\u0428\u0430\u0431\u043b\u043e\u043d \u00ab\u041c\u043e\u0441\u0442\u00bb \u043e\u0437\u043d\u0430\u0447\u0430\u0435\u0442 \u043e\u0442\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0430\u0431\u0441\u0442\u0440\u0430\u043a\u0446\u0438\u0438 \u043e\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438, \u0447\u0442\u043e\u0431\u044b \u0438\u0445 \u043e\u0431\u0435 \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u043d\u0435\u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e \u0434\u0440\u0443\u0433 \u043e\u0442 \u0434\u0440\u0443\u0433\u0430.<\/p><\/blockquote>\n<p><strong>\u041f\u0440\u0438\u043c\u0435\u0440<\/strong><\/p>\n<p>  <\/p>\n<p>\u0420\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0432\u044b\u0448\u0435\u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u0441 \u0432\u0435\u0431-\u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0430\u043c\u0438. \u0421\u0434\u0435\u043b\u0430\u0435\u043c \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u044e <code>WebPage<\/code>:<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">interface WebPage {     public function __construct(Theme $theme);     public function getContent(); }  class About implements WebPage {     protected $theme;      public function __construct(Theme $theme)     {         $this-&gt;theme = $theme;     }      public function getContent()     {         return &quot;About page in &quot; . $this-&gt;theme-&gt;getColor();     } }  class Careers implements WebPage {     protected $theme;      public function __construct(Theme $theme)     {         $this-&gt;theme = $theme;     }      public function getContent()     {         return &quot;Careers page in &quot; . $this-&gt;theme-&gt;getColor();     } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041e\u0442\u0434\u0435\u043b\u0438\u043c \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u044e \u0442\u0435\u043c:<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">interface Theme {     public function getColor(); }  class DarkTheme implements Theme {     public function getColor()     {         return 'Dark Black';     } } class LightTheme implements Theme {     public function getColor()     {         return 'Off white';     } } class AquaTheme implements Theme {     public function getColor()     {         return 'Light blue';     } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041e\u0431\u0435 \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0438:<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">$darkTheme = new DarkTheme();  $about = new About($darkTheme); $careers = new Careers($darkTheme);  echo $about-&gt;getContent(); \/\/ &quot;About page in Dark Black&quot;; echo $careers-&gt;getContent(); \/\/ &quot;Careers page in Dark Black&quot;;<\/code><\/pre>\n<p>  <\/p>\n<h3 id=\"imagehttpshabrastorageorgfiles899fb76f3899fb76f3bbc4489a71f36d4c0b190f8png-komponovschik\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/899\/fb7\/6f3\/899fb76f3bbc4489a71f36d4c0b190f8.png\" alt=\"image\"\/> \u041a\u043e\u043c\u043f\u043e\u043d\u043e\u0432\u0449\u0438\u043a<\/h3>\n<p>  <\/p>\n<p><strong>\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u044f<\/strong><\/p>\n<p>  <\/p>\n<p>\u041a\u0430\u0436\u0434\u0430\u044f \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432. \u0423 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u0430 \u0435\u0441\u0442\u044c \u043e\u0434\u043d\u0438 \u0438 \u0442\u0435 \u0436\u0435 \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u0430: \u0437\u0430\u0440\u043f\u043b\u0430\u0442\u0430, \u043e\u0431\u044f\u0437\u0430\u043d\u043d\u043e\u0441\u0442\u0438, \u043e\u0442\u0447\u0451\u0442\u043d\u043e\u0441\u0442\u044c \u043f\u0435\u0440\u0435\u0434 \u043a\u0435\u043c-\u0442\u043e, \u0441\u0443\u0431\u043e\u0440\u0434\u0438\u043d\u0430\u0446\u0438\u044f&#8230;<\/p>\n<p>  <\/p>\n<p><strong>\u0412\u043a\u0440\u0430\u0442\u0446\u0435<\/strong><\/p>\n<p>  <\/p>\n<p>\u0428\u0430\u0431\u043b\u043e\u043d \u00ab\u041a\u043e\u043c\u043f\u043e\u043d\u043e\u0432\u0449\u0438\u043a\u00bb \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u0430\u043c \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0432 \u0435\u0434\u0438\u043d\u043e\u043c \u043f\u043e\u0440\u044f\u0434\u043a\u0435.<\/p>\n<p>  <\/p>\n<p><strong>\u0412\u0438\u043a\u0438\u043f\u0435\u0434\u0438\u044f<\/strong><\/p>\n<p>  <\/p>\n<blockquote><p>\u0428\u0430\u0431\u043b\u043e\u043d \u00ab\u041a\u043e\u043c\u043f\u043e\u043d\u043e\u0432\u0449\u0438\u043a\u00bb \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u0435\u0442 \u043e\u0431\u0449\u0438\u0439 \u043f\u043e\u0440\u044f\u0434\u043e\u043a \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u0433\u0440\u0443\u043f\u043f\u044b \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u0441\u043b\u043e\u0432\u043d\u043e \u044d\u0442\u043e \u043e\u0434\u0438\u043d\u043e\u0447\u043d\u044b\u0439 \u044d\u043a\u0437\u0435\u043c\u043f\u043b\u044f\u0440 \u043e\u0431\u044a\u0435\u043a\u0442\u0430. \u0421\u0443\u0442\u044c \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u2014 \u043a\u043e\u043c\u043f\u043e\u043d\u043e\u0432\u0430\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0432 \u0434\u0440\u0435\u0432\u043e\u0432\u0438\u0434\u043d\u0443\u044e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0434\u043b\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0438 \u043e\u0442 \u0447\u0430\u0441\u0442\u043d\u043e\u0433\u043e \u043a \u0446\u0435\u043b\u043e\u043c\u0443. \u0428\u0430\u0431\u043b\u043e\u043d \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043a\u043b\u0438\u0435\u043d\u0442\u0430\u043c \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u043e \u043e\u0431\u0440\u0430\u0449\u0430\u0442\u044c\u0441\u044f \u043a \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u044b\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c \u0438 \u043a \u0433\u0440\u0443\u043f\u043f\u0430\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432.<\/p><\/blockquote>\n<p><strong>\u041f\u0440\u0438\u043c\u0435\u0440<\/strong><br \/>  \u0412\u043e\u0442 \u0440\u0430\u0437\u043d\u044b\u0435 \u0442\u0438\u043f\u044b \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432:<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">interface Employee {     public function __construct(string $name, float $salary);     public function getName(): string;     public function setSalary(float $salary);     public function getSalary(): float;     public function getRoles(): array; }  class Developer implements Employee {     protected $salary;     protected $name;      public function __construct(string $name, float $salary)     {         $this-&gt;name = $name;         $this-&gt;salary = $salary;     }      public function getName(): string     {         return $this-&gt;name;     }      public function setSalary(float $salary)     {         $this-&gt;salary = $salary;     }      public function getSalary(): float     {         return $this-&gt;salary;     }      public function getRoles(): array     {         return $this-&gt;roles;     } }  class Designer implements Employee {     protected $salary;     protected $name;      public function __construct(string $name, float $salary)     {         $this-&gt;name = $name;         $this-&gt;salary = $salary;     }      public function getName(): string     {         return $this-&gt;name;     }      public function setSalary(float $salary)     {         $this-&gt;salary = $salary;     }      public function getSalary(): float     {         return $this-&gt;salary;     }      public function getRoles(): array     {         return $this-&gt;roles;     } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0410 \u0432\u043e\u0442 \u043a\u043e\u043c\u043f\u0430\u043d\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u0430\u044f \u0441\u043e\u0441\u0442\u043e\u0438\u0442 \u0438\u0437 \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0442\u0438\u043f\u043e\u0432:<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">class Organization {     protected $employees;      public function addEmployee(Employee $employee)     {         $this-&gt;employees[] = $employee;     }      public function getNetSalaries(): float     {         $netSalary = 0;          foreach ($this-&gt;employees as $employee) {             $netSalary += $employee-&gt;getSalary();         }          return $netSalary;     } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435:<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">\/\/ \u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0441\u043e\u0442\u0440\u0443\u0434\u043d\u0438\u043a\u043e\u0432 $john = new Developer('John Doe', 12000); $jane = new Designer('Jane Doe', 15000);  \/\/ \u0412\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0438\u0445 \u0432 \u0448\u0442\u0430\u0442 $organization = new Organization(); $organization-&gt;addEmployee($john); $organization-&gt;addEmployee($jane);  echo &quot;Net salaries: &quot; . $organization-&gt;getNetSalaries(); \/\/ Net Salaries: 22000<\/code><\/pre>\n<p>  <\/p>\n<h3 id=\"imagehttpshabrastorageorgfiles1d6a22eff1d6a22eff4b047e691417f69f37647f5png-dekorator\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/1d6\/a22\/eff\/1d6a22eff4b047e691417f69f37647f5.png\" alt=\"image\"\/> \u0414\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440<\/h3>\n<p>  <\/p>\n<p><strong>\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u044f<\/strong><\/p>\n<p>  <\/p>\n<p>\u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0443 \u0432\u0430\u0441 \u0441\u0432\u043e\u0439 \u0430\u0432\u0442\u043e\u0441\u0435\u0440\u0432\u0438\u0441, \u043e\u043a\u0430\u0437\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0435 \u0443\u0441\u043b\u0443\u0433\u0438. \u041a\u0430\u043a \u0432\u044b\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u043a\u043b\u0438\u0435\u043d\u0442\u0430\u043c \u0441\u0447\u0451\u0442? \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043f\u043e\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u0441\u043b\u0443\u0433\u0438 \u0438 \u0438\u0445 \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u044c \u2014 \u0438 \u0432 \u043a\u043e\u043d\u0446\u0435 \u043a\u043e\u043d\u0446\u043e\u0432 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u0441\u044f \u0438\u0442\u043e\u0433\u043e\u0432\u0430\u044f \u0441\u0443\u043c\u043c\u0430 \u043a \u043e\u043f\u043b\u0430\u0442\u0435. \u0417\u0434\u0435\u0441\u044c \u043a\u0430\u0436\u0434\u044b\u0439 \u0442\u0438\u043f \u0443\u0441\u043b\u0443\u0433\u0438 \u2014 \u044d\u0442\u043e \u00ab\u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u00bb.<\/p>\n<p>  <\/p>\n<p><strong>\u0412\u043a\u0440\u0430\u0442\u0446\u0435<\/strong><\/p>\n<p>  <\/p>\n<p>\u0428\u0430\u0431\u043b\u043e\u043d \u00ab\u0414\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u00bb \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u043e \u0432\u0440\u0435\u043c\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438 \u0438\u0437\u043c\u0435\u043d\u044f\u0442\u044c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u043e\u0431\u0451\u0440\u0442\u044b\u0432\u0430\u044f \u0435\u0433\u043e \u0432 \u043e\u0431\u044a\u0435\u043a\u0442 \u043a\u043b\u0430\u0441\u0441\u0430 \u00ab\u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u0430\u00bb.<\/p>\n<p>  <\/p>\n<p><strong>\u0412\u0438\u043a\u0438\u043f\u0435\u0434\u0438\u044f<\/strong><\/p>\n<p>  <\/p>\n<blockquote><p>\u0428\u0430\u0431\u043b\u043e\u043d \u00ab\u0414\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u00bb \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u043a \u043e\u0431\u044a\u0435\u043a\u0442\u0443 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 (\u0441\u0442\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0438\u043b\u0438 \u0434\u0438\u043d\u0430\u043c\u0438\u0447\u0435\u0441\u043a\u0438), \u043d\u0435 \u0432\u043b\u0438\u044f\u044f \u043d\u0430 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0434\u0440\u0443\u0433\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0442\u043e\u0433\u043e \u0436\u0435 \u043a\u043b\u0430\u0441\u0441\u0430. \u0428\u0430\u0431\u043b\u043e\u043d \u0447\u0430\u0441\u0442\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0441\u043e\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0430 \u0435\u0434\u0438\u043d\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0439 \u043e\u0431\u044f\u0437\u0430\u043d\u043d\u043e\u0441\u0442\u0438 (Single Responsibility Principle), \u043f\u043e\u0441\u043a\u043e\u043b\u044c\u043a\u0443 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0440\u0430\u0437\u0434\u0435\u043b\u0438\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043c\u0435\u0436\u0434\u0443 \u043a\u043b\u0430\u0441\u0441\u0430\u043c\u0438 \u0434\u043b\u044f \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u0437\u0430\u0434\u0430\u0447.<\/p><\/blockquote>\n<p><strong>\u041f\u0440\u0438\u043c\u0435\u0440<\/strong><\/p>\n<p>  <\/p>\n<p>\u0412\u043e\u0437\u044c\u043c\u0451\u043c \u0432 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u043a\u043e\u0444\u0435. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441:<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">interface Coffee {     public function getCost();     public function getDescription(); }  class SimpleCoffee implements Coffee {     public function getCost()     {         return 10;     }      public function getDescription()     {         return 'Simple coffee';     } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041c\u043e\u0436\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043a\u043e\u0434 \u0440\u0430\u0441\u0448\u0438\u0440\u044f\u0435\u043c\u044b\u043c, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0432\u043d\u043e\u0441\u0438\u0442\u044c \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438. \u0414\u043e\u0431\u0430\u0432\u0438\u043c \u00ab\u0434\u0435\u043a\u043e\u0440\u0430\u0442\u043e\u0440\u044b\u00bb:<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">class MilkCoffee implements Coffee {     protected $coffee;      public function __construct(Coffee $coffee)     {         $this-&gt;coffee = $coffee;     }      public function getCost()     {         return $this-&gt;coffee-&gt;getCost() + 2;     }      public function getDescription()     {         return $this-&gt;coffee-&gt;getDescription() . ', milk';     } }  class WhipCoffee implements Coffee {     protected $coffee;      public function __construct(Coffee $coffee)     {         $this-&gt;coffee = $coffee;     }      public function getCost()     {         return $this-&gt;coffee-&gt;getCost() + 5;     }      public function getDescription()     {         return $this-&gt;coffee-&gt;getDescription() . ', whip';     } }  class VanillaCoffee implements Coffee {     protected $coffee;      public function __construct(Coffee $coffee)     {         $this-&gt;coffee = $coffee;     }      public function getCost()     {         return $this-&gt;coffee-&gt;getCost() + 3;     }      public function getDescription()     {         return $this-&gt;coffee-&gt;getDescription() . ', vanilla';     } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u043f\u0440\u0438\u0433\u043e\u0442\u043e\u0432\u0438\u043c \u043a\u043e\u0444\u0435:<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">$someCoffee = new SimpleCoffee(); echo $someCoffee-&gt;getCost(); \/\/ 10 echo $someCoffee-&gt;getDescription(); \/\/ Simple Coffee  $someCoffee = new MilkCoffee($someCoffee); echo $someCoffee-&gt;getCost(); \/\/ 12 echo $someCoffee-&gt;getDescription(); \/\/ Simple Coffee, milk  $someCoffee = new WhipCoffee($someCoffee); echo $someCoffee-&gt;getCost(); \/\/ 17 echo $someCoffee-&gt;getDescription(); \/\/ Simple Coffee, milk, whip  $someCoffee = new VanillaCoffee($someCoffee); echo $someCoffee-&gt;getCost(); \/\/ 20 echo $someCoffee-&gt;getDescription(); \/\/ Simple Coffee, milk, whip, vanilla<\/code><\/pre>\n<p>  <\/p>\n<h3 id=\"imagehttpshabrastorageorgfilesc1feaf9e9c1feaf9e90c0486fb48479326557424apng-fasad\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/c1f\/eaf\/9e9\/c1feaf9e90c0486fb48479326557424a.png\" alt=\"image\"\/> \u0424\u0430\u0441\u0430\u0434<\/h3>\n<p>  <\/p>\n<p><strong>\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u044f<\/strong><\/p>\n<p>  <\/p>\n<p>\u041a\u0430\u043a \u0432\u043a\u043b\u044e\u0447\u0438\u0442\u044c \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440? \u0412\u044b \u0441\u043a\u0430\u0436\u0435\u0442\u0435: \u00ab\u041d\u0430\u0436\u0430\u0442\u044c \u043a\u043d\u043e\u043f\u043a\u0443 \u0432\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f\u00bb. \u042d\u0442\u043e \u043f\u043e\u0442\u043e\u043c\u0443, \u0447\u0442\u043e \u0432\u044b \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0435 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u043c\u044b\u0439 \u043a\u043e\u043c\u043f\u044c\u044e\u0442\u0435\u0440\u043e\u043c \u043d\u0430\u0440\u0443\u0436\u0443. \u0410 \u0432\u043d\u0443\u0442\u0440\u0438 \u043d\u0435\u0433\u043e \u043f\u0440\u043e\u0438\u0441\u0445\u043e\u0434\u0438\u0442 \u043e\u0447\u0435\u043d\u044c \u043c\u043d\u043e\u0433\u043e \u043f\u0440\u043e\u0446\u0435\u0441\u0441\u043e\u0432. \u041f\u0440\u043e\u0441\u0442\u043e\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u043b\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0439 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b \u2014 \u044d\u0442\u043e \u0444\u0430\u0441\u0430\u0434.<\/p>\n<p>  <\/p>\n<p><strong>\u0412\u043a\u0440\u0430\u0442\u0446\u0435<\/strong><\/p>\n<p>  <\/p>\n<p>\u0428\u0430\u0431\u043b\u043e\u043d \u00ab\u0424\u0430\u0441\u0430\u0434\u00bb \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0443\u043f\u0440\u043e\u0449\u0451\u043d\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u043b\u044f \u0441\u043b\u043e\u0436\u043d\u043e\u0439 \u043f\u043e\u0434\u0441\u0438\u0441\u0442\u0435\u043c\u044b.<\/p>\n<p>  <\/p>\n<p><strong>\u0412\u0438\u043a\u0438\u043f\u0435\u0434\u0438\u044f<\/strong><\/p>\n<p>  <\/p>\n<blockquote><p>\u00ab\u0424\u0430\u0441\u0430\u0434\u00bb \u2014 \u044d\u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442, \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0439 \u0443\u043f\u0440\u043e\u0449\u0451\u043d\u043d\u044b\u0439 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u043b\u044f \u0431\u043e\u043b\u0435\u0435 \u043a\u0440\u0443\u043f\u043d\u043e\u0433\u043e \u0442\u0435\u043b\u0430 \u043a\u043e\u0434\u0430, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 \u043a\u043b\u0430\u0441\u0441\u043e\u0432.<\/p><\/blockquote>\n<p><strong>\u041f\u0440\u0438\u043c\u0435\u0440<\/strong><\/p>\n<p>  <\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043a\u043b\u0430\u0441\u0441 computer:<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">class Computer {     public function getElectricShock()     {         echo &quot;Ouch!&quot;;     }      public function makeSound()     {         echo &quot;Beep beep!&quot;;     }      public function showLoadingScreen()     {         echo &quot;Loading..&quot;;     }      public function bam()     {         echo &quot;Ready to be used!&quot;;     }      public function closeEverything()     {         echo &quot;Bup bup bup buzzzz!&quot;;     }      public function sooth()     {         echo &quot;Zzzzz&quot;;     }      public function pullCurrent()     {         echo &quot;Haaah!&quot;;     } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u00ab\u0444\u0430\u0441\u0430\u0434\u00bb:<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">class ComputerFacade {     protected $computer;      public function __construct(Computer $computer)     {         $this-&gt;computer = $computer;     }      public function turnOn()     {         $this-&gt;computer-&gt;getElectricShock();         $this-&gt;computer-&gt;makeSound();         $this-&gt;computer-&gt;showLoadingScreen();         $this-&gt;computer-&gt;bam();     }      public function turnOff()     {         $this-&gt;computer-&gt;closeEverything();         $this-&gt;computer-&gt;pullCurrent();         $this-&gt;computer-&gt;sooth();     } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435:<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">$computer = new ComputerFacade(new Computer()); $computer-&gt;turnOn(); \/\/ Ouch! Beep beep! Loading.. Ready to be used! $computer-&gt;turnOff(); \/\/ Bup bup buzzz! Haah! Zzzzz<\/code><\/pre>\n<p>  <\/p>\n<h3 id=\"imagehttpshabrastorageorgfilese17d114ebe17d114eb9d645c7ab57f590a1aea3b3png-prisposoblenec\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/e17\/d11\/4eb\/e17d114eb9d645c7ab57f590a1aea3b3.png\" alt=\"image\"\/> \u041f\u0440\u0438\u0441\u043f\u043e\u0441\u043e\u0431\u043b\u0435\u043d\u0435\u0446<\/h3>\n<p>  <\/p>\n<p><strong>\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u044f<\/strong><\/p>\n<p>  <\/p>\n<p>\u041e\u0431\u044b\u0447\u043d\u043e \u0432 \u0437\u0430\u0432\u0435\u0434\u0435\u043d\u0438\u044f\u0445 \u043e\u0431\u0449\u0435\u043f\u0438\u0442\u0430 \u0447\u0430\u0439 \u0437\u0430\u0432\u0430\u0440\u0438\u0432\u0430\u044e\u0442 \u043d\u0435 \u043e\u0442\u0434\u0435\u043b\u044c\u043d\u043e \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043a\u043b\u0438\u0435\u043d\u0442\u0430, \u0430 \u0441\u0440\u0430\u0437\u0443 \u0432 \u043d\u0435\u043a\u043e\u0439 \u043a\u0440\u0443\u043f\u043d\u043e\u0439 \u0451\u043c\u043a\u043e\u0441\u0442\u0438. \u042d\u0442\u043e \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442\u044c \u0440\u0435\u0441\u0443\u0440\u0441\u044b: \u0433\u0430\u0437\/\u044d\u043b\u0435\u043a\u0442\u0440\u0438\u0447\u0435\u0441\u0442\u0432\u043e, \u0432\u0440\u0435\u043c\u044f \u0438 \u0442. \u0434. \u0428\u0430\u0431\u043b\u043e\u043d \u00ab\u041f\u0440\u0438\u0441\u043f\u043e\u0441\u043e\u0431\u043b\u0435\u043d\u0435\u0446\u00bb \u043a\u0430\u043a \u0440\u0430\u0437 \u043f\u043e\u0441\u0432\u044f\u0449\u0451\u043d \u043e\u0431\u0449\u0435\u043c\u0443 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044e (sharing).<\/p>\n<p>  <\/p>\n<p><strong>\u0412\u043a\u0440\u0430\u0442\u0446\u0435<\/strong><\/p>\n<p>  <\/p>\n<p>\u0428\u0430\u0431\u043b\u043e\u043d \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0430\u043c\u044f\u0442\u0438 \u0438\u043b\u0438 \u0432\u044b\u0447\u0438\u0441\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0439 \u0441\u0442\u043e\u0438\u043c\u043e\u0441\u0442\u0438 \u0437\u0430 \u0441\u0447\u0451\u0442 \u043e\u0431\u0449\u0435\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435\u0433\u043e \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043e\u0434\u0438\u043d\u0430\u043a\u043e\u0432\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432.<\/p>\n<p>  <\/p>\n<p><strong>\u0412\u0438\u043a\u0438\u043f\u0435\u0434\u0438\u044f<\/strong><\/p>\n<p>  <\/p>\n<blockquote><p>\u00ab\u041f\u0440\u0438\u0441\u043f\u043e\u0441\u043e\u0431\u043b\u0435\u043d\u0435\u0446\u00bb \u2014 \u044d\u0442\u043e \u043e\u0431\u044a\u0435\u043a\u0442, \u043c\u0438\u043d\u0438\u043c\u0438\u0437\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435 \u043f\u0430\u043c\u044f\u0442\u0438 \u0437\u0430 \u0441\u0447\u0451\u0442 \u043e\u0431\u0449\u0435\u0433\u043e \u0441 \u0434\u0440\u0443\u0433\u0438\u043c\u0438, \u0442\u0430\u043a\u0438\u043c\u0438 \u0436\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043a\u0430\u043a \u043c\u043e\u0436\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u0435\u0433\u043e \u043e\u0431\u044a\u0451\u043c\u0430 \u0434\u0430\u043d\u043d\u044b\u0445. \u042d\u0442\u043e \u0441\u043f\u043e\u0441\u043e\u0431 \u043f\u0440\u0438\u043c\u0435\u043d\u0435\u043d\u0438\u044f \u043c\u043d\u043e\u0433\u043e\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u043a\u043e\u0433\u0434\u0430 \u043f\u0440\u043e\u0441\u0442\u043e\u0435 \u043f\u043e\u0432\u0442\u043e\u0440\u044f\u044e\u0449\u0435\u0435\u0441\u044f \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0451\u0442 \u043a \u043d\u0435\u043f\u0440\u0438\u0435\u043c\u043b\u0435\u043c\u043e\u043c\u0443 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u044e \u043f\u0430\u043c\u044f\u0442\u0438.<\/p><\/blockquote>\n<p><strong>\u041f\u0440\u0438\u043c\u0435\u0440<\/strong><\/p>\n<p>  <\/p>\n<p>\u0421\u0434\u0435\u043b\u0430\u0435\u043c \u0442\u0438\u043f\u044b \u0447\u0430\u044f \u0438 \u0447\u0430\u0439\u043d\u0438\u043a\u0430.<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">\/\/ \u041f\u0440\u0438\u0441\u043f\u043e\u0441\u043e\u0431\u043b\u0435\u043d\u0435\u0446 \u2014 \u0442\u043e, \u0447\u0442\u043e \u0431\u0443\u0434\u0435\u0442 \u0437\u0430\u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u043e. \/\/ \u0422\u0438\u043f\u044b \u0447\u0430\u044f \u0437\u0434\u0435\u0441\u044c \u2014 \u043f\u0440\u0438\u0441\u043f\u043e\u0441\u043e\u0431\u043b\u0435\u043d\u0446\u044b. class KarakTea { }  \/\/ \u0414\u0435\u0439\u0441\u0442\u0432\u0443\u0435\u0442 \u043a\u0430\u043a \u0444\u0430\u0431\u0440\u0438\u043a\u0430 \u0438 \u044d\u043a\u043e\u043d\u043e\u043c\u0438\u0442 \u0447\u0430\u0439 class TeaMaker {     protected $availableTea = [];      public function make($preference)     {         if (empty($this-&gt;availableTea[$preference])) {             $this-&gt;availableTea[$preference] = new KarakTea();         }          return $this-&gt;availableTea[$preference];     } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0421\u0434\u0435\u043b\u0430\u0435\u043c \u0437\u0430\u0431\u0435\u0433\u0430\u043b\u043e\u0432\u043a\u0443 <code>TeaShop<\/code>, \u043f\u0440\u0438\u043d\u0438\u043c\u0430\u044e\u0449\u0443\u044e \u0438 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0449\u0443\u044e \u0437\u0430\u043a\u0430\u0437\u044b:<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">class TeaShop {     protected $orders;     protected $teaMaker;      public function __construct(TeaMaker $teaMaker)     {         $this-&gt;teaMaker = $teaMaker;     }      public function takeOrder(string $teaType, int $table)     {         $this-&gt;orders[$table] = $this-&gt;teaMaker-&gt;make($teaType);     }      public function serve()     {         foreach ($this-&gt;orders as $table =&gt; $tea) {             echo &quot;Serving tea to table# &quot; . $table;         }     } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435:<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">$teaMaker = new TeaMaker(); $shop = new TeaShop($teaMaker);  $shop-&gt;takeOrder('less sugar', 1); $shop-&gt;takeOrder('more milk', 2); $shop-&gt;takeOrder('without sugar', 5);  $shop-&gt;serve(); \/\/ Serving tea to table# 1 \/\/ Serving tea to table# 2 \/\/ Serving tea to table# 5<\/code><\/pre>\n<p>  <\/p>\n<h3 id=\"imagehttpshabrastorageorgfilesa8ed1e294a8ed1e294f2842a0b4d066c471905962png-zamestitel\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/a8e\/d1e\/294\/a8ed1e294f2842a0b4d066c471905962.png\" alt=\"image\"\/> \u0417\u0430\u043c\u0435\u0441\u0442\u0438\u0442\u0435\u043b\u044c<\/h3>\n<p>  <\/p>\n<p><strong>\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u044f<\/strong><\/p>\n<p>  <\/p>\n<p>\u041e\u0442\u043a\u0440\u044b\u0442\u044c \u0434\u0432\u0435\u0440\u044c \u0441 \u044d\u043b\u0435\u043a\u0442\u0440\u043e\u043d\u043d\u044b\u043c \u0437\u0430\u043c\u043a\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u0430\u0440\u0442\u043e\u0447\u043a\u0438 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 (access card) \u0438\u043b\u0438 \u043a\u043d\u043e\u043f\u043a\u0438 \u0434\u043b\u044f \u043e\u0431\u0445\u043e\u0434\u0430 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u0431\u0435\u0437\u043e\u043f\u0430\u0441\u043d\u043e\u0441\u0442\u0438. \u0422\u043e \u0435\u0441\u0442\u044c \u043e\u0441\u043d\u043e\u0432\u043d\u0430\u044f \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0434\u0432\u0435\u0440\u0438 \u2014 \u043e\u0442\u043a\u0440\u044b\u0442\u044c\u0441\u044f, \u0430 \u043f\u043e\u0432\u0435\u0440\u0445 \u043d\u0435\u0451 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0435\u0449\u0451 \u043a\u0430\u043a\u0430\u044f-\u0442\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u2014 \u00ab\u0437\u0430\u043c\u0435\u0441\u0442\u0438\u0442\u0435\u043b\u044c\u00bb. <\/p>\n<p>  <\/p>\n<p><strong>\u0412\u043a\u0440\u0430\u0442\u0446\u0435<\/strong><\/p>\n<p>  <\/p>\n<p>\u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u00ab\u0417\u0430\u043c\u0435\u0441\u0442\u0438\u0442\u0435\u043b\u044c\u00bb \u043a\u043b\u0430\u0441\u0441 \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u0434\u0440\u0443\u0433\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430.<\/p>\n<p>  <\/p>\n<p><strong>\u0412\u0438\u043a\u0438\u043f\u0435\u0434\u0438\u044f<\/strong><\/p>\n<p>  <\/p>\n<blockquote><p>\u0412 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u043e\u0431\u0449\u0435\u0439 \u0444\u043e\u0440\u043c\u0435 \u00ab\u0417\u0430\u043c\u0435\u0441\u0442\u0438\u0442\u0435\u043b\u044c\u00bb \u2014 \u044d\u0442\u043e \u043a\u043b\u0430\u0441\u0441, \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0438\u0440\u0443\u044e\u0449\u0438\u0439 \u043a\u0430\u043a \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u043a \u0447\u0435\u043c\u0443-\u043b\u0438\u0431\u043e. \u042d\u0442\u043e \u043e\u0431\u043e\u043b\u043e\u0447\u043a\u0430 \u0438\u043b\u0438 \u043e\u0431\u044a\u0435\u043a\u0442-\u0430\u0433\u0435\u043d\u0442, \u0432\u044b\u0437\u044b\u0432\u0430\u0435\u043c\u044b\u0439 \u043a\u043b\u0438\u0435\u043d\u0442\u043e\u043c \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u0434\u0440\u0443\u0433\u043e\u043c\u0443, \u00ab\u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u043c\u0443\u00bb \u043e\u0431\u044a\u0435\u043a\u0442\u0443. \u00ab\u0417\u0430\u043c\u0435\u0441\u0442\u0438\u0442\u0435\u043b\u044c\u00bb \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0435\u0440\u0435\u0430\u0434\u0440\u0435\u0441\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u0437\u0430\u043f\u0440\u043e\u0441\u044b \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0435\u043c\u0443 \u043e\u0431\u044a\u0435\u043a\u0442\u0443, \u0430 \u043c\u043e\u0436\u0435\u0442 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0442\u044c \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u0443\u044e \u043b\u043e\u0433\u0438\u043a\u0443: \u043a\u0435\u0448\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0434\u0430\u043d\u043d\u044b\u0445 \u043f\u0440\u0438 \u0438\u043d\u0442\u0435\u043d\u0441\u0438\u0432\u043d\u043e\u043c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u0438\u043b\u0438 \u043f\u043e\u0442\u0440\u0435\u0431\u043b\u0435\u043d\u0438\u0438 \u0440\u0435\u0441\u0443\u0440\u0441\u043e\u0432 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c; \u043f\u0440\u043e\u0432\u0435\u0440\u043a\u0430 \u043f\u0440\u0435\u0434\u0432\u0430\u0440\u0438\u0442\u0435\u043b\u044c\u043d\u044b\u0445 \u0443\u0441\u043b\u043e\u0432\u0438\u0439 (preconditions) \u0434\u043e \u0432\u044b\u0437\u043e\u0432\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0439 \u043d\u0430\u0441\u0442\u043e\u044f\u0449\u0438\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u043c.<\/p><\/blockquote>\n<p><strong>\u041f\u0440\u0438\u043c\u0435\u0440<\/strong><\/p>\n<p>  <\/p>\n<p>\u0420\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u0432\u0435\u0440\u0438 \u0438 \u0441\u0430\u043c\u0443 \u0434\u0432\u0435\u0440\u044c:<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">interface Door {     public function open();     public function close(); }  class LabDoor implements Door {     public function open()     {         echo &quot;Opening lab door&quot;;     }      public function close()     {         echo &quot;Closing the lab door&quot;;     } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0421\u0434\u0435\u043b\u0430\u0435\u043c \u00ab\u0437\u0430\u043c\u0435\u0441\u0442\u0438\u0442\u0435\u043b\u044f\u00bb, \u0447\u0442\u043e\u0431\u044b \u0434\u0432\u0435\u0440\u044c \u043c\u043e\u0433\u043b\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0437\u0430\u0449\u0438\u0442\u043d\u0443\u044e \u0444\u0443\u043d\u043a\u0446\u0438\u044e:<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">class Security {     protected $door;      public function __construct(Door $door)     {         $this-&gt;door = $door;     }      public function open($password)     {         if ($this-&gt;authenticate($password)) {             $this-&gt;door-&gt;open();         } else {             echo &quot;Big no! It ain't possible.&quot;;         }     }      public function authenticate($password)     {         return $password === '$ecr@t';     }      public function close()     {         $this-&gt;door-&gt;close();     } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435:<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">$door = new Security(new LabDoor()); $door-&gt;open('invalid'); \/\/ Big no! It ain't possible.  $door-&gt;open('$ecr@t'); \/\/ Opening lab door $door-&gt;close(); \/\/ Closing lab door<\/code><\/pre>\n<p>  <\/p>\n<p>\u0415\u0449\u0451 \u043e\u0434\u0438\u043d \u043f\u0440\u0438\u043c\u0435\u0440 \u0441\u0432\u044f\u0437\u0430\u043d \u0441 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0435\u0439 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u044f \u0434\u0430\u043d\u043d\u044b\u0445 (data-mapper). \u0421 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u044d\u0442\u043e\u0433\u043e \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u044f \u043d\u0435\u0434\u0430\u0432\u043d\u043e \u0441\u0434\u0435\u043b\u0430\u043b ODM (Object Data Mapper) \u0434\u043b\u044f MongoDB. \u042f \u043d\u0430\u043f\u0438\u0441\u0430\u043b \u00ab\u0437\u0430\u043c\u0435\u0441\u0442\u0438\u0442\u0435\u043b\u044f\u00bb \u0432\u043e\u043a\u0440\u0443\u0433 mongo-\u043a\u043b\u0430\u0441\u0441\u043e\u0432, \u0432\u043e\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0432\u0448\u0438\u0441\u044c \u0432\u043e\u043b\u0448\u0435\u0431\u043d\u044b\u043c \u043c\u0435\u0442\u043e\u0434\u043e\u043c <code>__call()<\/code>. \u0412\u0441\u0435 \u0432\u044b\u0437\u043e\u0432\u044b \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u043b\u0438 \u043a \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b\u044c\u043d\u044b\u043c mongo-\u043a\u043b\u0430\u0441\u0441\u0430\u043c \u0447\u0435\u0440\u0435\u0437 \u00ab\u0437\u0430\u043c\u0435\u0441\u0442\u0438\u0442\u0435\u043b\u044f\u00bb, \u0430 \u0438\u0437\u0432\u043b\u0435\u0447\u0451\u043d\u043d\u044b\u0435 \u0440\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442\u044b \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u043b\u0438\u0441\u044c \u043a\u0430\u043a \u0435\u0441\u0442\u044c. \u0422\u043e\u043b\u044c\u043a\u043e \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u0441 <code>find<\/code> \u0438\u043b\u0438 <code>findOne<\/code> \u0434\u0430\u043d\u043d\u044b\u0435 \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u044b\u0432\u0430\u043b\u0438\u0441\u044c \u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u044b \u0442\u0440\u0435\u0431\u0443\u0435\u043c\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u043e\u0437\u0432\u0440\u0430\u0449\u0430\u043b\u0438\u0441\u044c \u0432\u043c\u0435\u0441\u0442\u043e <code>Cursor<\/code>.<\/p>\n<p>  <\/p>\n<h2 id=\"povedencheskie-shablony-proektirovaniya\">\u041f\u043e\u0432\u0435\u0434\u0435\u043d\u0447\u0435\u0441\u043a\u0438\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f<\/h2>\n<p>  <\/p>\n<p><strong>\u0412\u043a\u0440\u0430\u0442\u0446\u0435<\/strong><\/p>\n<p>  <\/p>\n<p>\u041e\u043d\u0438 \u0441\u0432\u044f\u0437\u0430\u043d\u044b \u0441 \u043f\u0440\u0438\u0441\u0432\u043e\u0435\u043d\u0438\u0435\u043c \u043e\u0431\u044f\u0437\u0430\u043d\u043d\u043e\u0441\u0442\u0435\u0439 (responsibilities) \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c. \u041e\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u043d\u044b\u0445 \u0448\u0430\u0431\u043b\u043e\u043d\u043e\u0432 \u043e\u043d\u0438 \u043e\u0442\u043b\u0438\u0447\u0430\u044e\u0442\u0441\u044f \u0442\u0435\u043c, \u0447\u0442\u043e \u043d\u0435 \u043f\u0440\u043e\u0441\u0442\u043e \u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443, \u043d\u043e \u0438 \u043e\u0447\u0435\u0440\u0447\u0438\u0432\u0430\u044e\u0442 \u0448\u0430\u0431\u043b\u043e\u043d\u044b \u043f\u0435\u0440\u0435\u0434\u0430\u0447\u0438 \u0434\u0430\u043d\u043d\u044b\u0445, \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f. \u0422\u043e \u0435\u0441\u0442\u044c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0447\u0435\u0441\u043a\u0438\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u044b \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0442 \u043e\u0442\u0432\u0435\u0442\u0438\u0442\u044c \u043d\u0430 \u0432\u043e\u043f\u0440\u043e\u0441 \u00ab\u041a\u0430\u043a \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u043c \u043a\u043e\u043c\u043f\u043e\u043d\u0435\u043d\u0442\u0435?\u00bb<\/p>\n<p>  <\/p>\n<p><strong>\u0412\u0438\u043a\u0438\u043f\u0435\u0434\u0438\u044f<\/strong><\/p>\n<p>  <\/p>\n<blockquote><p>\u041f\u043e\u0432\u0435\u0434\u0435\u043d\u0447\u0435\u0441\u043a\u0438\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b \u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0440\u0430\u0437\u043b\u0438\u0447\u043d\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0438 \u043a\u043b\u0430\u0441\u0441\u043e\u0432. \u041e\u043d\u0438 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0438\u0432\u0430\u044e\u0442 \u0433\u0438\u0431\u043a\u043e\u0441\u0442\u044c \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043c\u0435\u0436\u0434\u0443 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438.<\/p><\/blockquote>\n<p>  <\/p>\n<ul>\n<li><a href=\"https:\/\/habrahabr.ru\/company\/mailru\/blog\/325492\/#imagehttpshabrastorageorgfiles8fc3f4f858fc3f4f85cd240bf9628c2c6e5728e2cpng-cepochka-otvetstvennosti\">\u0426\u0435\u043f\u043e\u0447\u043a\u0430 \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u0438<\/a><\/li>\n<li><a href=\"https:\/\/habrahabr.ru\/company\/mailru\/blog\/325492\/#imagehttpshabrastorageorgfiles8d2e5082a8d2e5082afd747d4aee91ca0e48113c4png-komanda\">\u041a\u043e\u043c\u0430\u043d\u0434\u0430<\/a><\/li>\n<li><a href=\"https:\/\/habrahabr.ru\/company\/mailru\/blog\/325492\/#imagehttpshabrastorageorgfiles625e57fc3625e57fc3cfa494da9b770f93f5322b0png-iterator\">\u0418\u0442\u0435\u0440\u0430\u0442\u043e\u0440<\/a><\/li>\n<li><a href=\"https:\/\/habrahabr.ru\/company\/mailru\/blog\/325492\/#imagehttpshabrastorageorgfiles4358f59fc4358f59fcb634418a9dc22bce47b0720png-posrednik\">\u041f\u043e\u0441\u0440\u0435\u0434\u043d\u0438\u043a<\/a><\/li>\n<li><a href=\"https:\/\/habrahabr.ru\/company\/mailru\/blog\/325492\/#imagehttpshabrastorageorgfilesf1c4c72d2f1c4c72d22204ce08703d3a196fa9908png-hranitel\">\u0425\u0440\u0430\u043d\u0438\u0442\u0435\u043b\u044c<\/a><\/li>\n<li><a href=\"https:\/\/habrahabr.ru\/company\/mailru\/blog\/325492\/#imagehttpshabrastorageorgfilesd7bce8a7ed7bce8a7e9cd4ed989a08d5f21c16f75png-nablyudatel\">\u041d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u0435\u043b\u044c<\/a><\/li>\n<li><a href=\"https:\/\/habrahabr.ru\/company\/mailru\/blog\/325492\/#imagehttpshabrastorageorgfiles735be130d735be130d5514a59a834860596a6087bpng-posetitel\">\u041f\u043e\u0441\u0435\u0442\u0438\u0442\u0435\u043b\u044c<\/a><\/li>\n<li><a href=\"https:\/\/habrahabr.ru\/company\/mailru\/blog\/325492\/#imagehttpshabrastorageorgfiles0ff1d477c0ff1d477ce4d4e2ca81d427ce072a757png-strategiya\">\u0421\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f<\/a><\/li>\n<li><a href=\"https:\/\/habrahabr.ru\/company\/mailru\/blog\/325492\/#imagehttpshabrastorageorgfiles375200f5a375200f5aa9c444aa74eac8813c00af5png-sostoyanie\">\u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435<\/a><\/li>\n<li><a href=\"https:\/\/habrahabr.ru\/company\/mailru\/blog\/325492\/#imagehttpshabrastorageorgfilesdc3e84492dc3e84492b0f47e0954fd7454fcad987png-shablonnyy-metod\">\u0428\u0430\u0431\u043b\u043e\u043d\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434<\/a><\/li>\n<\/ul>\n<p>  <\/p>\n<h3 id=\"imagehttpshabrastorageorgfiles8fc3f4f858fc3f4f85cd240bf9628c2c6e5728e2cpng-cepochka-otvetstvennosti\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/8fc\/3f4\/f85\/8fc3f4f85cd240bf9628c2c6e5728e2c.png\" alt=\"image\"\/> \u0426\u0435\u043f\u043e\u0447\u043a\u0430 \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u0438<\/h3>\n<p>  <\/p>\n<p><strong>\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u044f<\/strong><\/p>\n<p>  <\/p>\n<p>\u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0434\u043b\u044f \u0432\u0430\u0448\u0435\u0433\u043e \u0431\u0430\u043d\u043a\u043e\u0432\u0441\u043a\u043e\u0433\u043e \u0441\u0447\u0451\u0442\u0430 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b \u0442\u0440\u0438 \u0441\u043f\u043e\u0441\u043e\u0431\u0430 \u043e\u043f\u043b\u0430\u0442\u044b (<code>A<\/code>, <code>B<\/code> \u0438 <code>C<\/code>). \u041a\u0430\u0436\u0434\u044b\u0439 \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442 \u0440\u0430\u0437\u043d\u044b\u0435 \u0434\u043e\u0441\u0442\u0443\u043f\u043d\u044b\u0435 \u0441\u0443\u043c\u043c\u044b \u0434\u0435\u043d\u0435\u0433: <code>A<\/code> \u2014 100 \u0434\u043e\u043b\u043b\u0430\u0440\u043e\u0432, <code>B<\/code> \u2014 300, <code>C<\/code> \u2014 1000. \u041f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442\u043d\u043e\u0441\u0442\u044c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u043f\u0440\u0438 \u043e\u043f\u043b\u0430\u0442\u0435: \u0410, \u0437\u0430\u0442\u0435\u043c \u0412, \u0437\u0430\u0442\u0435\u043c \u0421. \u0412\u044b \u043f\u044b\u0442\u0430\u0435\u0442\u0435\u0441\u044c \u043a\u0443\u043f\u0438\u0442\u044c \u0447\u0442\u043e-\u0442\u043e \u0437\u0430 210 \u0434\u043e\u043b\u043b\u0430\u0440\u043e\u0432. \u041d\u0430 \u043e\u0441\u043d\u043e\u0432\u0430\u043d\u0438\u0438 \u00ab\u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u0438\u00bb \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043f\u043e\u043f\u044b\u0442\u0430\u0435\u0442\u0441\u044f \u043e\u043f\u043b\u0430\u0442\u0438\u0442\u044c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c \u0410. \u0415\u0441\u043b\u0438 \u0434\u0435\u043d\u0435\u0433 \u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u2014 \u0442\u043e \u043e\u043f\u043b\u0430\u0442\u0430 \u043f\u0440\u043e\u0445\u043e\u0434\u0438\u0442, \u0430 \u0446\u0435\u043f\u043e\u0447\u043a\u0430 \u043f\u0440\u0435\u0440\u044b\u0432\u0430\u0435\u0442\u0441\u044f. \u0415\u0441\u043b\u0438 \u0434\u0435\u043d\u0435\u0433 \u043d\u0435 \u0445\u0432\u0430\u0442\u0430\u0435\u0442 \u2014 \u0442\u043e \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u0442 \u043a \u0441\u043f\u043e\u0441\u043e\u0431\u0443 \u0412, \u0438 \u0442. \u0434. <\/p>\n<p>  <\/p>\n<p><strong>\u0412\u043a\u0440\u0430\u0442\u0446\u0435<\/strong><\/p>\n<p>  <\/p>\n<p>\u0428\u0430\u0431\u043b\u043e\u043d \u00ab\u0426\u0435\u043f\u043e\u0447\u043a\u0430 \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u0438\u00bb \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0441\u043e\u0437\u0434\u0430\u0432\u0430\u0442\u044c \u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432. \u0417\u0430\u043f\u0440\u043e\u0441 \u0432\u0445\u043e\u0434\u0438\u0442 \u0441 \u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0446\u0430 \u0446\u0435\u043f\u043e\u0447\u043a\u0438 \u0438 \u0434\u0432\u0438\u0436\u0435\u0442\u0441\u044f \u043e\u0442 \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u043a \u043e\u0431\u044a\u0435\u043a\u0442\u0443, \u043f\u043e\u043a\u0430 \u043d\u0435 \u0431\u0443\u0434\u0435\u0442 \u043d\u0430\u0439\u0434\u0435\u043d \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0439 \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u0447\u0438\u043a.<\/p>\n<p>  <\/p>\n<p><strong>\u0412\u0438\u043a\u0438\u043f\u0435\u0434\u0438\u044f<\/strong><\/p>\n<p>  <\/p>\n<blockquote><p>\u0428\u0430\u0431\u043b\u043e\u043d \u00ab\u0426\u0435\u043f\u043e\u0447\u043a\u0430 \u043e\u0442\u0432\u0435\u0442\u0441\u0442\u0432\u0435\u043d\u043d\u043e\u0441\u0442\u0438\u00bb \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0443\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0449\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u0438 \u0440\u044f\u0434 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0449\u0438\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432. \u041a\u0430\u0436\u0434\u044b\u0439 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0449\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442 \u0441\u043e\u0434\u0435\u0440\u0436\u0438\u0442 \u043b\u043e\u0433\u0438\u043a\u0443, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0449\u0443\u044e \u0442\u0438\u043f\u044b \u043a\u043e\u043c\u0430\u043d\u0434\u043d\u044b\u0445 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043e\u043d \u043c\u043e\u0436\u0435\u0442 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u0442\u044c, \u0430 \u043e\u0441\u0442\u0430\u043b\u044c\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u0434\u0430\u044e\u0442\u0441\u044f \u043f\u043e \u0446\u0435\u043f\u043e\u0447\u043a\u0435 \u0441\u043b\u0435\u0434\u0443\u044e\u0449\u0435\u043c\u0443 \u043e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e\u0449\u0435\u043c\u0443 \u043e\u0431\u044a\u0435\u043a\u0442\u0443.<\/p><\/blockquote>\n<p><strong>\u041f\u0440\u0438\u043c\u0435\u0440<\/strong><\/p>\n<p>  <\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043e\u0441\u043d\u043e\u0432\u043d\u043e\u0439 \u0431\u0430\u043d\u043a\u043e\u0432\u0441\u043a\u0438\u0439 \u0441\u0447\u0451\u0442, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0439 \u043b\u043e\u0433\u0438\u043a\u0443 \u0441\u0432\u044f\u0437\u044b\u0432\u0430\u043d\u0438\u044f \u0441\u0447\u0435\u0442\u043e\u0432 \u0432 \u0446\u0435\u043f\u043e\u0447\u043a\u0438, \u0438 \u0441\u0430\u043c\u0438 \u0441\u0447\u0435\u0442\u0430.<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">abstract class Account {     protected $successor;     protected $balance;      public function setNext(Account $account)     {         $this-&gt;successor = $account;     }      public function pay(float $amountToPay)     {         if ($this-&gt;canPay($amountToPay)) {             echo sprintf('Paid %s using %s' . PHP_EOL, $amountToPay, get_called_class());         } elseif ($this-&gt;successor) {             echo sprintf('Cannot pay using %s. Proceeding ..' . PHP_EOL, get_called_class());             $this-&gt;successor-&gt;pay($amountToPay);         } else {             throw new Exception('None of the accounts have enough balance');         }     }      public function canPay($amount): bool     {         return $this-&gt;balance &gt;= $amount;     } }  class Bank extends Account {     protected $balance;      public function __construct(float $balance)     {         $this-&gt;balance = $balance;     } }  class Paypal extends Account {     protected $balance;      public function __construct(float $balance)     {         $this-&gt;balance = $balance;     } }  class Bitcoin extends Account {     protected $balance;      public function __construct(float $balance)     {         $this-&gt;balance = $balance;     } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u0432\u044b\u0448\u0435 \u043b\u0438\u043d\u043a\u043e\u0432 (Bank, Paypal, Bitcoin) \u043f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u0438\u043c \u0446\u0435\u043f\u043e\u0447\u043a\u0443:<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">\/\/ \u0421\u0434\u0435\u043b\u0430\u0435\u043c \u0442\u0430\u043a\u0443\u044e \u0446\u0435\u043f\u043e\u0447\u043a\u0443 \/\/      $bank-&gt;$paypal-&gt;$bitcoin \/\/ \/\/ \u041f\u0440\u0438\u043e\u0440\u0438\u0442\u0435\u0442 \u0443 \u0431\u0430\u043d\u043a\u0430 \/\/      \u0415\u0441\u043b\u0438 \u0431\u0430\u043d\u043a \u043d\u0435 \u043c\u043e\u0436\u0435\u0442 \u043e\u043f\u043b\u0430\u0442\u0438\u0442\u044c, \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a Paypal \/\/      \u0415\u0441\u043b\u0438 Paypal \u043d\u0435 \u043c\u043e\u0436\u0435\u0442, \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u0438\u043c \u043a Bitcoin  $bank = new Bank(100);          \/\/ \u0423 \u0431\u0430\u043d\u043a\u0430 \u0431\u0430\u043b\u0430\u043d\u0441 100 $paypal = new Paypal(200);      \/\/ \u0423 Paypal \u0431\u0430\u043b\u0430\u043d\u0441 200 $bitcoin = new Bitcoin(300);    \/\/ \u0423 Bitcoin \u0431\u0430\u043b\u0430\u043d\u0441 300  $bank-&gt;setNext($paypal); $paypal-&gt;setNext($bitcoin);  \/\/ \u041d\u0430\u0447\u043d\u0451\u043c \u0441 \u0431\u0430\u043d\u043a\u0430 $bank-&gt;pay(259);  \/\/ \u0412\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u0432\u0438\u0434 \/\/ ============== \/\/ \u041d\u0435\u043b\u044c\u0437\u044f \u043e\u043f\u043b\u0430\u0442\u0438\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0431\u0430\u043d\u043a\u0430. \u041e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e... \/\/ \u041d\u0435\u043b\u044c\u0437\u044f \u043e\u043f\u043b\u0430\u0442\u0438\u0442\u044c \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Paypal. \u041e\u0431\u0440\u0430\u0431\u0430\u0442\u044b\u0432\u0430\u044e... \/\/ \u041e\u043f\u043b\u0430\u0447\u0435\u043d\u043e 259 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e Bitcoin!<\/code><\/pre>\n<p>  <\/p>\n<h3 id=\"imagehttpshabrastorageorgfiles8d2e5082a8d2e5082afd747d4aee91ca0e48113c4png-komanda\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/8d2\/e50\/82a\/8d2e5082afd747d4aee91ca0e48113c4.png\" alt=\"image\"\/> \u041a\u043e\u043c\u0430\u043d\u0434\u0430<\/h3>\n<p>  <\/p>\n<p><strong>\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u044f<\/strong><\/p>\n<p>  <\/p>\n<p>\u0412\u044b \u043f\u0440\u0438\u0448\u043b\u0438 \u0432 \u0440\u0435\u0441\u0442\u043e\u0440\u0430\u043d. \u0412\u044b (<code>Client<\/code>) \u043f\u0440\u043e\u0441\u0438\u0442\u0435 \u043e\u0444\u0438\u0446\u0438\u0430\u043d\u0442\u0430 (<code>Invoker<\/code>) \u043f\u0440\u0438\u043d\u0435\u0441\u0442\u0438 \u0431\u043b\u044e\u0434\u0430 (<code>Command<\/code>). \u041e\u0444\u0438\u0446\u0438\u0430\u043d\u0442 \u043f\u0435\u0440\u0435\u043d\u0430\u043f\u0440\u0430\u0432\u043b\u044f\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441 \u0448\u0435\u0444-\u043f\u043e\u0432\u0430\u0440\u0443 (<code>Receiver<\/code>), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0437\u043d\u0430\u0435\u0442, \u0447\u0442\u043e \u0438 \u043a\u0430\u043a \u0433\u043e\u0442\u043e\u0432\u0438\u0442\u044c. \u0414\u0440\u0443\u0433\u043e\u0439 \u043f\u0440\u0438\u043c\u0435\u0440: \u0432\u044b (<code>Client<\/code>) \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442\u0435 (<code>Command<\/code>) \u0442\u0435\u043b\u0435\u0432\u0438\u0437\u043e\u0440 (<code>Receiver<\/code>) \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043f\u0443\u043b\u044c\u0442\u0430 (<code>Invoker<\/code>).<\/p>\n<p>  <\/p>\n<p><strong>\u0412\u043a\u0440\u0430\u0442\u0446\u0435<\/strong><\/p>\n<p>  <\/p>\n<p>\u0428\u0430\u0431\u043b\u043e\u043d \u00ab\u041a\u043e\u043c\u0430\u043d\u0434\u0430\u00bb \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0438\u043d\u043a\u0430\u043f\u0441\u0443\u043b\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u0432 \u043e\u0431\u044a\u0435\u043a\u0442\u044b. \u041a\u043b\u044e\u0447\u0435\u0432\u0430\u044f \u0438\u0434\u0435\u044f \u2014 \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0430 \u043e\u0442\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u043a\u043b\u0438\u0435\u043d\u0442\u0430 \u043e\u0442 \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044f.<\/p>\n<p>  <\/p>\n<p><strong>\u0412\u0438\u043a\u0438\u043f\u0435\u0434\u0438\u044f<\/strong><\/p>\n<p>  <\/p>\n<blockquote><p>\u0412 \u0448\u0430\u0431\u043b\u043e\u043d\u0435 \u00ab\u041a\u043e\u043c\u0430\u043d\u0434\u0430\u00bb \u043e\u0431\u044a\u0435\u043a\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u0438\u043d\u043a\u0430\u043f\u0441\u0443\u043b\u044f\u0446\u0438\u0438 \u0432\u0441\u0435\u0439 \u0438\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u0438, \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0439 \u0434\u043b\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043b\u0438\u0431\u043e \u0434\u043b\u044f \u0435\u0433\u043e \u0438\u043d\u0438\u0446\u0438\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e\u0437\u0434\u043d\u0435\u0435. \u0418\u043d\u0444\u043e\u0440\u043c\u0430\u0446\u0438\u044f \u0432\u043a\u043b\u044e\u0447\u0430\u0435\u0442 \u0432 \u0441\u0435\u0431\u044f \u0438\u043c\u044f \u043c\u0435\u0442\u043e\u0434\u0430; \u043e\u0431\u044a\u0435\u043a\u0442, \u0432\u043b\u0430\u0434\u0435\u044e\u0449\u0438\u0439 \u043c\u0435\u0442\u043e\u0434\u043e\u043c; \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u044f \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432 \u043c\u0435\u0442\u043e\u0434\u0430. <\/p><\/blockquote>\n<p><strong>\u041f\u0440\u0438\u043c\u0435\u0440<\/strong><\/p>\n<p>  <\/p>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u043f\u043e\u043b\u0443\u0447\u0430\u0442\u0435\u043b\u044f, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0435\u0433\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u043e\u0436\u0435\u0442 \u0431\u044b\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043e.<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">\/\/ Receiver class Bulb {     public function turnOn()     {         echo &quot;Bulb has been lit&quot;;     }      public function turnOff()     {         echo &quot;Darkness!&quot;;     } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u044b\u0432\u0430\u0442\u044c \u043a\u0430\u0436\u0434\u0430\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430. \u0422\u0430\u043a\u0436\u0435 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u043d\u0430\u0431\u043e\u0440 \u043a\u043e\u043c\u0430\u043d\u0434.<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">interface Command {     public function execute();     public function undo();     public function redo(); }  \/\/ Command class TurnOn implements Command {     protected $bulb;      public function __construct(Bulb $bulb)     {         $this-&gt;bulb = $bulb;     }      public function execute()     {         $this-&gt;bulb-&gt;turnOn();     }      public function undo()     {         $this-&gt;bulb-&gt;turnOff();     }      public function redo()     {         $this-&gt;execute();     } }  class TurnOff implements Command {     protected $bulb;      public function __construct(Bulb $bulb)     {         $this-&gt;bulb = $bulb;     }      public function execute()     {         $this-&gt;bulb-&gt;turnOff();     }      public function undo()     {         $this-&gt;bulb-&gt;turnOn();     }      public function redo()     {         $this-&gt;execute();     } } <\/code><\/pre>\n<p>  <\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0432\u044b\u0437\u044b\u0432\u0430\u044e\u0449\u0435\u0433\u043e <code>Invoker<\/code>, \u0441 \u043a\u043e\u0442\u043e\u0440\u044b\u043c \u0431\u0443\u0434\u0435\u0442 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043a\u043b\u0438\u0435\u043d\u0442 \u0434\u043b\u044f \u043e\u0431\u0440\u0430\u0431\u043e\u0442\u043a\u0438 \u043a\u043e\u043c\u0430\u043d\u0434.<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">\/\/ Invoker class RemoteControl {     public function submit(Command $command)     {         $command-&gt;execute();     } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u041f\u043e\u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u043a\u0430\u043a \u0432\u0441\u0451 \u044d\u0442\u043e \u043c\u043e\u0436\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043a\u043b\u0438\u0435\u043d\u0442:<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">$bulb = new Bulb();  $turnOn = new TurnOn($bulb); $turnOff = new TurnOff($bulb);  $remote = new RemoteControl(); $remote-&gt;submit($turnOn); \/\/ \u041b\u0430\u043c\u043f\u043e\u0447\u043a\u0430 \u0437\u0430\u0436\u0433\u043b\u0430\u0441\u044c! $remote-&gt;submit($turnOff); \/\/ \u0422\u0435\u043c\u043d\u043e\u0442\u0430!<\/code><\/pre>\n<p>  <\/p>\n<p>\u0428\u0430\u0431\u043b\u043e\u043d \u00ab\u041a\u043e\u043c\u0430\u043d\u0434\u0430\u00bb \u043c\u043e\u0436\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u0438 \u0434\u043b\u044f \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0438\u0441\u0442\u0435\u043c\u044b \u043d\u0430 \u043e\u0441\u043d\u043e\u0432\u0435 \u0442\u0440\u0430\u043d\u0437\u0430\u043a\u0446\u0438\u0439. \u0422\u043e \u0435\u0441\u0442\u044c \u0441\u0438\u0441\u0442\u0435\u043c\u044b, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0432\u044b \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0435 \u0438\u0441\u0442\u043e\u0440\u0438\u044e \u043a\u043e\u043c\u0430\u043d\u0434 \u043f\u043e \u043c\u0435\u0440\u0435 \u0438\u0445 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f. \u0415\u0441\u043b\u0438 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u043a\u043e\u043c\u0430\u043d\u0434\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0430 \u0443\u0441\u043f\u0435\u0448\u043d\u043e, \u0442\u043e \u0432\u0441\u0451 \u0445\u043e\u0440\u043e\u0448\u043e. \u0412 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0441\u0438\u0441\u0442\u0435\u043c\u0430 \u0438\u0442\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u043f\u043e \u0438\u0441\u0442\u043e\u0440\u0438\u0438 \u0438 \u0434\u0435\u043b\u0430\u0435\u0442 <code>undo<\/code> \u0434\u043b\u044f \u0432\u0441\u0435\u0445 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u044b\u0445 \u043a\u043e\u043c\u0430\u043d\u0434.<\/p>\n<p>  <\/p>\n<h3 id=\"imagehttpshabrastorageorgfiles625e57fc3625e57fc3cfa494da9b770f93f5322b0png-iterator\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/625\/e57\/fc3\/625e57fc3cfa494da9b770f93f5322b0.png\" alt=\"image\"\/> \u0418\u0442\u0435\u0440\u0430\u0442\u043e\u0440<\/h3>\n<p>  <\/p>\n<p><strong>\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u044f<\/strong><\/p>\n<p>  <\/p>\n<p>\u0425\u043e\u0440\u043e\u0448\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440 \u2014 \u0440\u0430\u0434\u0438\u043e\u043f\u0440\u0438\u0451\u043c\u043d\u0438\u043a. \u0412\u044b \u043d\u0430\u0447\u0438\u043d\u0430\u0435\u0442\u0435 \u0441 \u043a\u0430\u043a\u043e\u0439-\u0442\u043e \u0440\u0430\u0434\u0438\u043e\u0441\u0442\u0430\u043d\u0446\u0438\u0438, \u0430 \u0437\u0430\u0442\u0435\u043c \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0430\u0435\u0442\u0435\u0441\u044c \u043f\u043e \u0441\u0442\u0430\u043d\u0446\u0438\u044f\u043c \u0432\u043f\u0435\u0440\u0451\u0434\/\u043d\u0430\u0437\u0430\u0434. \u0422\u043e \u0435\u0441\u0442\u044c \u0443\u0441\u0442\u0440\u043e\u0439\u0441\u0442\u0432\u043e \u043f\u0440\u0435\u0434\u043e\u0441\u0442\u0430\u0432\u043b\u044f\u0435\u0442 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0434\u043b\u044f \u0438\u0442\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u043e \u043a\u0430\u043d\u0430\u043b\u0430\u043c.<\/p>\n<p>  <\/p>\n<p><strong>\u0412\u043a\u0440\u0430\u0442\u0446\u0435<\/strong><\/p>\n<p>  <\/p>\n<p>\u0428\u0430\u0431\u043b\u043e\u043d \u2014 \u044d\u0442\u043e \u0441\u043f\u043e\u0441\u043e\u0431 \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u0430 \u0431\u0435\u0437 \u0440\u0430\u0441\u043a\u0440\u044b\u0442\u0438\u044f \u0431\u0430\u0437\u043e\u0432\u043e\u0433\u043e \u043f\u0440\u0435\u0434\u0441\u0442\u0430\u0432\u043b\u0435\u043d\u0438\u044f.<\/p>\n<p>  <\/p>\n<p><strong>\u0412\u0438\u043a\u0438\u043f\u0435\u0434\u0438\u044f<\/strong><\/p>\n<p>  <\/p>\n<blockquote><p>\u0412 \u044d\u0442\u043e\u043c \u0448\u0430\u0431\u043b\u043e\u043d\u0435 \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u0434\u043b\u044f \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u043f\u043e \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0443 \u0438 \u043e\u0431\u0435\u0441\u043f\u0435\u0447\u0435\u043d\u0438\u044f \u0434\u043e\u0441\u0442\u0443\u043f\u0430 \u043a \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430\u043c \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430. \u0428\u0430\u0431\u043b\u043e\u043d \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442 \u043e\u0442\u0434\u0435\u043b\u0435\u043d\u0438\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u043e\u0432 \u043e\u0442 \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430. \u0412 \u043a\u0430\u043a\u0438\u0445-\u0442\u043e \u0441\u043b\u0443\u0447\u0430\u044f\u0445 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u044b, \u0441\u043f\u0435\u0446\u0438\u0444\u0438\u0447\u043d\u044b\u0435 \u0434\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u0439\u043d\u0435\u0440\u0430, \u043d\u0435 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043e\u0442\u0434\u0435\u043b\u0435\u043d\u044b.<\/p><\/blockquote>\n<p><strong>\u041f\u0440\u0438\u043c\u0435\u0440<\/strong><\/p>\n<p>  <\/p>\n<p>\u0412 PHP \u0434\u043e\u0432\u043e\u043b\u044c\u043d\u043e \u043b\u0435\u0433\u043a\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u044d\u0442\u043e\u0442 \u0448\u0430\u0431\u043b\u043e\u043d \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u043e\u0439 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438 PHP. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0440\u0430\u0434\u0438\u043e\u0441\u0442\u0430\u043d\u0446\u0438\u044e <code>RadioStation<\/code>.<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">class RadioStation {     protected $frequency;      public function __construct(float $frequency)     {         $this-&gt;frequency = $frequency;     }      public function getFrequency(): float     {         return $this-&gt;frequency;     } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u0438\u0442\u0435\u0440\u0430\u0442\u043e\u0440:<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">use Countable; use Iterator;  class StationList implements Countable, Iterator {     \/** @var RadioStation[] $stations *\/     protected $stations = [];      \/** @var int $counter *\/     protected $counter;      public function addStation(RadioStation $station)     {         $this-&gt;stations[] = $station;     }      public function removeStation(RadioStation $toRemove)     {         $toRemoveFrequency = $toRemove-&gt;getFrequency();         $this-&gt;stations = array_filter($this-&gt;stations, function (RadioStation $station) use ($toRemoveFrequency) {             return $station-&gt;getFrequency() !== $toRemoveFrequency;         });     }      public function count(): int     {         return count($this-&gt;stations);     }      public function current(): RadioStation     {         return $this-&gt;stations[$this-&gt;counter];     }      public function key()     {         return $this-&gt;counter;     }      public function next()     {         $this-&gt;counter++;     }      public function rewind()     {         $this-&gt;counter = 0;     }      public function valid(): bool     {         return isset($this-&gt;stations[$this-&gt;counter]);     } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435:<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">$stationList = new StationList();  $stationList-&gt;addStation(new RadioStation(89)); $stationList-&gt;addStation(new RadioStation(101)); $stationList-&gt;addStation(new RadioStation(102)); $stationList-&gt;addStation(new RadioStation(103.2));  foreach($stationList as $station) {     echo $station-&gt;getFrequency() . PHP_EOL; }  $stationList-&gt;removeStation(new RadioStation(89)); \/\/ Will remove station 89<\/code><\/pre>\n<p>  <\/p>\n<h3 id=\"imagehttpshabrastorageorgfiles4358f59fc4358f59fcb634418a9dc22bce47b0720png-posrednik\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/435\/8f5\/9fc\/4358f59fcb634418a9dc22bce47b0720.png\" alt=\"image\"\/> \u041f\u043e\u0441\u0440\u0435\u0434\u043d\u0438\u043a<\/h3>\n<p>  <\/p>\n<p><strong>\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u044f<\/strong><\/p>\n<p>  <\/p>\n<p>\u041a\u043e\u0433\u0434\u0430 \u0432\u044b \u0433\u043e\u0432\u043e\u0440\u0438\u0442\u0435 \u0441 \u043a\u0435\u043c-\u0442\u043e \u043f\u043e \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u0438\u043a\u0443, \u0442\u043e \u043c\u0435\u0436\u0434\u0443 \u0432\u0430\u043c\u0438 \u0438 \u0441\u043e\u0431\u0435\u0441\u0435\u0434\u043d\u0438\u043a\u043e\u043c \u043d\u0430\u0445\u043e\u0434\u0438\u0442\u0441\u044f \u043c\u043e\u0431\u0438\u043b\u044c\u043d\u044b\u0439 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440. \u0422\u043e \u0435\u0441\u0442\u044c \u0441\u0438\u0433\u043d\u0430\u043b \u043f\u0435\u0440\u0435\u0434\u0430\u0451\u0442\u0441\u044f \u0447\u0435\u0440\u0435\u0437 \u043d\u0435\u0433\u043e, \u0430 \u043d\u0435 \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e. \u0412 \u0434\u0430\u043d\u043d\u043e\u043c \u043f\u0440\u0438\u043c\u0435\u0440\u0435 \u043e\u043f\u0435\u0440\u0430\u0442\u043e\u0440 \u2014 \u043f\u043e\u0441\u0440\u0435\u0434\u043d\u0438\u043a.<\/p>\n<p>  <\/p>\n<p><strong>\u0412\u043a\u0440\u0430\u0442\u0446\u0435<\/strong><\/p>\n<p>  <\/p>\n<p>\u0428\u0430\u0431\u043b\u043e\u043d \u00ab\u041f\u043e\u0441\u0440\u0435\u0434\u043d\u0438\u043a\u00bb \u043f\u043e\u0434\u0440\u0430\u0437\u0443\u043c\u0435\u0432\u0430\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0435 \u0441\u0442\u043e\u0440\u043e\u043d\u043d\u0435\u0433\u043e \u043e\u0431\u044a\u0435\u043a\u0442\u0430 (\u00ab\u043f\u043e\u0441\u0440\u0435\u0434\u043d\u0438\u043a\u0430\u00bb) \u0434\u043b\u044f \u0443\u043f\u0440\u0430\u0432\u043b\u0435\u043d\u0438\u044f \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435\u043c \u043c\u0435\u0436\u0434\u0443 \u0434\u0432\u0443\u043c\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438 (\u00ab\u043a\u043e\u043b\u043b\u0435\u0433\u0430\u043c\u0438\u00bb). \u0428\u0430\u0431\u043b\u043e\u043d \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0443\u043c\u0435\u043d\u044c\u0448\u0438\u0442\u044c \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u043e\u0441\u0442\u044c (coupling) \u043a\u043b\u0430\u0441\u0441\u043e\u0432, \u043e\u0431\u0449\u0430\u044e\u0449\u0438\u0445\u0441\u044f \u0434\u0440\u0443\u0433 \u0441 \u0434\u0440\u0443\u0433\u043e\u043c, \u0432\u0435\u0434\u044c \u0442\u0435\u043f\u0435\u0440\u044c \u043e\u043d\u0438 \u043d\u0435 \u0434\u043e\u043b\u0436\u043d\u044b \u0437\u043d\u0430\u0442\u044c \u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f\u0445 \u0441\u0432\u043e\u0438\u0445 \u0441\u043e\u0431\u0435\u0441\u0435\u0434\u043d\u0438\u043a\u043e\u0432.<\/p>\n<p>  <\/p>\n<p><strong>\u0412\u0438\u043a\u0438\u043f\u0435\u0434\u0438\u044f<\/strong><\/p>\n<p>  <\/p>\n<blockquote><p>\u0428\u0430\u0431\u043b\u043e\u043d \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u043e\u0431\u044a\u0435\u043a\u0442, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0438\u043d\u043a\u0430\u043f\u0441\u0443\u043b\u0438\u0440\u0443\u0435\u0442 \u0441\u043f\u043e\u0441\u043e\u0431 \u0432\u0437\u0430\u0438\u043c\u043e\u0434\u0435\u0439\u0441\u0442\u0432\u0438\u044f \u043d\u0430\u0431\u043e\u0440\u0430 \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432.<\/p><\/blockquote>\n<p><strong>\u041f\u0440\u0438\u043c\u0435\u0440<\/strong><\/p>\n<p>  <\/p>\n<p>\u041f\u0440\u043e\u0441\u0442\u0435\u0439\u0448\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440: \u0447\u0430\u0442 (\u00ab\u043f\u043e\u0441\u0440\u0435\u0434\u043d\u0438\u043a\u00bb), \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u0435\u043b\u0438 (\u00ab\u043a\u043e\u043b\u043b\u0435\u0433\u0438\u00bb) \u043e\u0442\u043f\u0440\u0430\u0432\u043b\u044f\u044e\u0442 \u0434\u0440\u0443\u0433 \u0434\u0440\u0443\u0433\u0443 \u0441\u043e\u043e\u0431\u0449\u0435\u043d\u0438\u044f.<\/p>\n<p>  <\/p>\n<p>\u0421\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u00ab\u043f\u043e\u0441\u0440\u0435\u0434\u043d\u0438\u043a\u0430\u00bb:<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">interface ChatRoomMediator  {     public function showMessage(User $user, string $message); }  \/\/ \u041f\u043e\u0441\u0440\u0435\u0434\u043d\u0438\u043a class ChatRoom implements ChatRoomMediator {     public function showMessage(User $user, string $message)     {         $time = date('M d, y H:i');         $sender = $user-&gt;getName();          echo $time . '[' . $sender . ']:' . $message;     } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u00ab\u043a\u043e\u043b\u043b\u0435\u0433\u00bb:<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">class User {     protected $name;     protected $chatMediator;      public function __construct(string $name, ChatRoomMediator $chatMediator) {         $this-&gt;name = $name;         $this-&gt;chatMediator = $chatMediator;     }      public function getName() {         return $this-&gt;name;     }      public function send($message) {         $this-&gt;chatMediator-&gt;showMessage($this, $message);     } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435:<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">$mediator = new ChatRoom();  $john = new User('John Doe', $mediator); $jane = new User('Jane Doe', $mediator);  $john-&gt;send('Hi there!'); $jane-&gt;send('Hey!');  \/\/ \u0412\u044b\u0445\u043e\u0434\u043d\u043e\u0439 \u0432\u0438\u0434 \/\/ Feb 14, 10:58 [John]: Hi there! \/\/ Feb 14, 10:58 [Jane]: Hey!<\/code><\/pre>\n<p>  <\/p>\n<h3 id=\"imagehttpshabrastorageorgfilesf1c4c72d2f1c4c72d22204ce08703d3a196fa9908png-hranitel\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/f1c\/4c7\/2d2\/f1c4c72d22204ce08703d3a196fa9908.png\" alt=\"image\"\/> \u0425\u0440\u0430\u043d\u0438\u0442\u0435\u043b\u044c<\/h3>\n<p>  <\/p>\n<p><strong>\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u044f<\/strong><\/p>\n<p>  <\/p>\n<p>\u0412 \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043f\u0440\u0438\u043c\u0435\u0440\u0430 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u0432\u0435\u0441\u0442\u0438 \u043a\u0430\u043b\u044c\u043a\u0443\u043b\u044f\u0442\u043e\u0440 (\u00ab\u0441\u043e\u0437\u0434\u0430\u0442\u0435\u043b\u044c\u00bb), \u0443 \u043a\u043e\u0442\u043e\u0440\u043e\u0433\u043e \u043b\u044e\u0431\u0430\u044f \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u044f\u044f \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u043d\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442\u0441\u044f \u0432 \u043f\u0430\u043c\u044f\u0442\u0438 (\u00ab\u0445\u0440\u0430\u043d\u0438\u0442\u0435\u043b\u044c\u00bb), \u0447\u0442\u043e\u0431\u044b \u0432\u044b \u043c\u043e\u0433\u043b\u0438 \u0441\u043d\u043e\u0432\u0430 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0435\u0451 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u043a\u0430\u043a\u0438\u0445-\u0442\u043e \u043a\u043d\u043e\u043f\u043e\u043a (\u00ab\u043e\u043f\u0435\u043a\u0443\u043d\u00bb).<\/p>\n<p>  <\/p>\n<p><strong>\u0412\u043a\u0440\u0430\u0442\u0446\u0435<\/strong><\/p>\n<p>  <\/p>\n<p>\u0428\u0430\u0431\u043b\u043e\u043d \u00ab\u0425\u0440\u0430\u043d\u0438\u0442\u0435\u043b\u044c\u00bb \u0444\u0438\u043a\u0441\u0438\u0440\u0443\u0435\u0442 \u0438 \u0445\u0440\u0430\u043d\u0438\u0442 \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u0447\u0442\u043e\u0431\u044b \u043e\u043d\u043e \u043b\u0435\u0433\u043a\u043e \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u043b\u043e\u0441\u044c.<\/p>\n<p>  <\/p>\n<p><strong>\u0412\u0438\u043a\u0438\u043f\u0435\u0434\u0438\u044f<\/strong><\/p>\n<p>  <\/p>\n<blockquote><p>\u0428\u0430\u0431\u043b\u043e\u043d \u00ab\u0425\u0440\u0430\u043d\u0438\u0442\u0435\u043b\u044c\u00bb \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 \u0432 \u0435\u0433\u043e \u043f\u0440\u0435\u0434\u044b\u0434\u0443\u0449\u0435\u043c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0438 (\u043e\u0442\u043c\u0435\u043d\u0430 \u0447\u0435\u0440\u0435\u0437 \u043e\u0442\u043a\u0430\u0442 \u2014 undo via rollback).<\/p><\/blockquote>\n<p>\u041e\u0431\u044b\u0447\u043d\u043e \u0448\u0430\u0431\u043b\u043e\u043d \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f, \u043a\u043e\u0433\u0434\u0430 \u043d\u0443\u0436\u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u0442\u044c \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043e\u0442\u043c\u0435\u043d\u044b \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438.<\/p>\n<p>  <\/p>\n<p><strong>\u041f\u0440\u0438\u043c\u0435\u0440<\/strong><\/p>\n<p>  <\/p>\n<p>\u0422\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u0432\u0440\u0435\u043c\u044f \u043e\u0442 \u0432\u0440\u0435\u043c\u0435\u043d\u0438 \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0435\u0442 \u0441\u0432\u043e\u0451 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435, \u0447\u0442\u043e\u0431\u044b \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0432\u043e\u0441\u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u044c \u0442\u0435\u043a\u0441\u0442 \u0432 \u043a\u0430\u043a\u043e\u043c-\u0442\u043e \u043f\u0440\u043e\u0448\u043b\u043e\u043c \u0432\u0438\u0434\u0435. <\/p>\n<p>  <\/p>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u043e\u0437\u0434\u0430\u0434\u0438\u043c \u043e\u0431\u044a\u0435\u043a\u0442 \u00ab\u0445\u0440\u0430\u043d\u0438\u0442\u0435\u043b\u044c\u00bb, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043c\u043e\u0436\u043d\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u044f\u0442\u044c \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0430.<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">class EditorMemento {     protected $content;      public function __construct(string $content)     {         $this-&gt;content = $content;     }      public function getContent()     {         return $this-&gt;content;     } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 (\u00ab\u0441\u043e\u0437\u0434\u0430\u0442\u0435\u043b\u044c\u00bb), \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 \u00ab\u0445\u0440\u0430\u043d\u0438\u0442\u0435\u043b\u044c\u00bb.<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">class Editor {     protected $content = '';      public function type(string $words)     {         $this-&gt;content = $this-&gt;content . ' ' . $words;     }      public function getContent()     {         return $this-&gt;content;     }      public function save()     {         return new EditorMemento($this-&gt;content);     }      public function restore(EditorMemento $memento)     {         $this-&gt;content = $memento-&gt;getContent();     } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435:<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">$editor = new Editor();  \/\/ \u041f\u0438\u0448\u0435\u043c \u0447\u0442\u043e-\u043d\u0438\u0431\u0443\u0434\u044c $editor-&gt;type('This is the first sentence.'); $editor-&gt;type('This is second.');  \/\/ \u0421\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0432: This is the first sentence. This is second. $saved = $editor-&gt;save();  \/\/ \u041f\u0438\u0448\u0435\u043c \u0435\u0449\u0451 $editor-&gt;type('And this is third.');  \/\/ Output: \u0421\u043e\u0434\u0435\u0440\u0436\u0438\u043c\u043e\u0435 \u0434\u043e \u0441\u043e\u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f echo $editor-&gt;getContent(); \/\/ This is the first sentence. This is second. And this is third.  \/\/ \u0412\u043e\u0441\u0441\u0442\u0430\u043d\u0430\u0432\u043b\u0438\u0432\u0430\u0435\u043c \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0435\u0435 \u0441\u043e\u0445\u0440\u0430\u043d\u0451\u043d\u043d\u043e\u0435 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 $editor-&gt;restore($saved);  $editor-&gt;getContent(); \/\/ This is the first sentence. This is second.<\/code><\/pre>\n<p>  <\/p>\n<h3 id=\"imagehttpshabrastorageorgfilesd7bce8a7ed7bce8a7e9cd4ed989a08d5f21c16f75png-nablyudatel\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/d7b\/ce8\/a7e\/d7bce8a7e9cd4ed989a08d5f21c16f75.png\" alt=\"image\"\/> \u041d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u0435\u043b\u044c<\/h3>\n<p>  <\/p>\n<p><strong>\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u044f<\/strong><\/p>\n<p>  <\/p>\n<p>\u0425\u043e\u0440\u043e\u0448\u0438\u0439 \u043f\u0440\u0438\u043c\u0435\u0440: \u043b\u044e\u0434\u0438, \u0438\u0449\u0443\u0449\u0438\u0435 \u0440\u0430\u0431\u043e\u0442\u0443, \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442\u0441\u044f \u043d\u0430 \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u043d\u0430 \u0441\u0430\u0439\u0442\u0430\u0445 \u0432\u0430\u043a\u0430\u043d\u0441\u0438\u0439 \u0438 \u043f\u043e\u043b\u0443\u0447\u0430\u044e\u0442 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f, \u043a\u043e\u0433\u0434\u0430 \u043f\u043e\u044f\u0432\u043b\u044f\u044e\u0442\u0441\u044f \u0432\u0430\u043a\u0430\u043d\u0441\u0438\u0438, \u043f\u043e\u0434\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u043f\u043e \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u0430\u043c.<\/p>\n<p>  <\/p>\n<p><strong>\u0412\u043a\u0440\u0430\u0442\u0446\u0435<\/strong><\/p>\n<p>  <\/p>\n<p>\u0428\u0430\u0431\u043b\u043e\u043d \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u044c \u043c\u0435\u0436\u0434\u0443 \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c\u0438, \u0447\u0442\u043e\u0431\u044b \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u043d\u0438\u0445 \u0435\u0433\u043e \u00ab\u043f\u043e\u0434\u0447\u0438\u043d\u0451\u043d\u043d\u044b\u0435\u00bb \u0443\u0437\u043d\u0430\u0432\u0430\u043b\u0438 \u043e\u0431 \u044d\u0442\u043e\u043c. <\/p>\n<p>  <\/p>\n<p><strong>\u0412\u0438\u043a\u0438\u043f\u0435\u0434\u0438\u044f<\/strong><\/p>\n<p>  <\/p>\n<blockquote><p>\u0412 \u0448\u0430\u0431\u043b\u043e\u043d\u0435 \u00ab\u041d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u0435\u043b\u044c\u00bb \u0435\u0441\u0442\u044c \u043e\u0431\u044a\u0435\u043a\u0442 (\u00ab\u0441\u0443\u0431\u044a\u0435\u043a\u0442\u00bb), \u0432\u0435\u0434\u0443\u0449\u0438\u0439 \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u0432\u043e\u0438\u0445 \u00ab\u043f\u043e\u0434\u0447\u0438\u043d\u0451\u043d\u043d\u044b\u0445\u00bb (\u00ab\u043d\u0430\u0431\u043b\u044e\u0434\u0430\u0442\u0435\u043b\u0435\u0439\u00bb) \u0438 \u0430\u0432\u0442\u043e\u043c\u0430\u0442\u0438\u0447\u0435\u0441\u043a\u0438 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u044f\u044e\u0449\u0438\u0439 \u0438\u0445 \u043e \u043b\u044e\u0431\u043e\u043c \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0441\u0432\u043e\u0435\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f, \u043e\u0431\u044b\u0447\u043d\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0432\u044b\u0437\u043e\u0432\u0430 \u043e\u0434\u043d\u043e\u0433\u043e \u0438\u0437 \u0438\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432.<\/p><\/blockquote>\n<p><strong>\u041f\u0440\u0438\u043c\u0435\u0440<\/strong><\/p>\n<p>  <\/p>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u043b\u044e\u0434\u0435\u0439, \u0438\u0449\u0443\u0449\u0438\u0445 \u0440\u0430\u0431\u043e\u0442\u0443, \u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043d\u0443\u0436\u043d\u043e \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u044f\u0442\u044c \u043e \u043f\u043e\u044f\u0432\u043b\u0435\u043d\u0438\u0438 \u0432\u0430\u043a\u0430\u043d\u0441\u0438\u0439.<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">class JobPost {     protected $title;      public function __construct(string $title)     {         $this-&gt;title = $title;     }      public function getTitle()     {         return $this-&gt;title;     } }  class JobSeeker implements Observer {     protected $name;      public function __construct(string $name)     {         $this-&gt;name = $name;     }      public function onJobPosted(JobPost $job)     {         \/\/ Do something with the job posting         echo 'Hi ' . $this-&gt;name . '! New job posted: '. $job-&gt;getTitle();     } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0446\u0438\u0438 \u0432\u0430\u043a\u0430\u043d\u0441\u0438\u0439, \u043d\u0430 \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u043b\u044e\u0434\u0438 \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u0434\u043f\u0438\u0441\u044b\u0432\u0430\u0442\u044c\u0441\u044f.<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">class JobPostings implements Observable {     protected $observers = [];      protected function notify(JobPost $jobPosting)     {         foreach ($this-&gt;observers as $observer) {             $observer-&gt;onJobPosted($jobPosting);         }     }      public function attach(Observer $observer)     {         $this-&gt;observers[] = $observer;     }      public function addJob(JobPost $jobPosting)     {         $this-&gt;notify($jobPosting);     } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435:<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">\/\/ \u0421\u043e\u0437\u0434\u0430\u0451\u043c \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u043e\u0432 $johnDoe = new JobSeeker('John Doe'); $janeDoe = new JobSeeker('Jane Doe');  \/\/ \u0421\u043e\u0437\u0434\u0430\u0451\u043c \u043f\u0443\u0431\u043b\u0438\u043a\u0430\u0442\u043e\u0440\u0430 \u0438 \u043f\u0440\u0438\u043a\u0440\u0435\u043f\u043b\u044f\u0435\u043c \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u043e\u0432 $jobPostings = new JobPostings(); $jobPostings-&gt;attach($johnDoe); $jobPostings-&gt;attach($janeDoe);  \/\/ \u0414\u043e\u0431\u0430\u0432\u043b\u044f\u0435\u043c \u043d\u043e\u0432\u0443\u044e \u0432\u0430\u043a\u0430\u043d\u0441\u0438\u044e \u0438 \u0441\u043c\u043e\u0442\u0440\u0438\u043c, \u0431\u0443\u0434\u0443\u0442 \u043b\u0438 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u044b \u043f\u043e\u0434\u043f\u0438\u0441\u0447\u0438\u043a\u0438 $jobPostings-&gt;addJob(new JobPost('Software Engineer'));  \/\/ Output \/\/ Hi John Doe! New job posted: Software Engineer \/\/ Hi Jane Doe! New job posted: Software Engineer<\/code><\/pre>\n<p>  <\/p>\n<h3 id=\"imagehttpshabrastorageorgfiles735be130d735be130d5514a59a834860596a6087bpng-posetitel\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/735\/be1\/30d\/735be130d5514a59a834860596a6087b.png\" alt=\"image\"\/> \u041f\u043e\u0441\u0435\u0442\u0438\u0442\u0435\u043b\u044c<\/h3>\n<p>  <\/p>\n<p><strong>\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u044f<\/strong><\/p>\n<p>  <\/p>\n<p>\u0422\u0443\u0440\u0438\u0441\u0442\u044b \u0441\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c \u0432 \u0414\u0443\u0431\u0430\u0439. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0438\u043c \u043d\u0443\u0436\u0435\u043d \u0441\u043f\u043e\u0441\u043e\u0431 \u043f\u043e\u043f\u0430\u0441\u0442\u044c \u0442\u0443\u0434\u0430 (\u0432\u0438\u0437\u0430). \u041f\u043e\u0441\u043b\u0435 \u043f\u0440\u0438\u0431\u044b\u0442\u0438\u044f \u043e\u043d\u0438 \u0431\u0443\u0434\u0443\u0442 \u043f\u043e\u0441\u0435\u0449\u0430\u0442\u044c \u043b\u044e\u0431\u0443\u044e \u0447\u0430\u0441\u0442\u044c \u0433\u043e\u0440\u043e\u0434\u0430, \u043d\u0435 \u0441\u043f\u0440\u0430\u0448\u0438\u0432\u0430\u044f \u0440\u0430\u0437\u0440\u0435\u0448\u0435\u043d\u0438\u044f, \u0445\u043e\u0434\u0438\u0442\u044c \u0433\u0434\u0435 \u0432\u0437\u0434\u0443\u043c\u0430\u0435\u0442\u0441\u044f. \u041f\u0440\u043e\u0441\u0442\u043e \u0441\u043a\u0430\u0436\u0438\u0442\u0435 \u0438\u043c \u043e \u043a\u0430\u043a\u043e\u043c-\u043d\u0438\u0431\u0443\u0434\u044c \u043c\u0435\u0441\u0442\u0435 \u2014 \u0438 \u0442\u0443\u0440\u0438\u0441\u0442\u044b \u043c\u043e\u0433\u0443\u0442 \u0442\u0430\u043c \u043f\u043e\u0431\u044b\u0432\u0430\u0442\u044c. \u0428\u0430\u0431\u043b\u043e\u043d \u00ab\u041f\u043e\u0441\u0435\u0442\u0438\u0442\u0435\u043b\u044c\u00bb \u043f\u043e\u043c\u043e\u0433\u0430\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043c\u0435\u0441\u0442\u0430 \u0434\u043b\u044f \u043f\u043e\u0441\u0435\u0449\u0435\u043d\u0438\u044f. <\/p>\n<p>  <\/p>\n<p><strong>\u0412\u043a\u0440\u0430\u0442\u0446\u0435<\/strong><\/p>\n<p>  <\/p>\n<p>\u0428\u0430\u0431\u043b\u043e\u043d \u00ab\u041f\u043e\u0441\u0435\u0442\u0438\u0442\u0435\u043b\u044c\u00bb \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u0431\u0443\u0434\u0443\u0449\u0438\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0434\u043b\u044f \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0431\u0435\u0437 \u0438\u0445 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f.<\/p>\n<p>  <\/p>\n<p><strong>\u0412\u0438\u043a\u0438\u043f\u0435\u0434\u0438\u044f<\/strong><\/p>\n<p>  <\/p>\n<blockquote><p>\u0428\u0430\u0431\u043b\u043e\u043d \u00ab\u041f\u043e\u0441\u0435\u0442\u0438\u0442\u0435\u043b\u044c\u00bb \u2014 \u044d\u0442\u043e \u0441\u043f\u043e\u0441\u043e\u0431 \u043e\u0442\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u043e\u0442 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u043e\u0431\u044a\u0435\u043a\u0442\u0430, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u043e\u043d \u043e\u043f\u0435\u0440\u0438\u0440\u0443\u0435\u0442. \u0420\u0435\u0437\u0443\u043b\u044c\u0442\u0430\u0442 \u043e\u0442\u0434\u0435\u043b\u0435\u043d\u0438\u044f \u2014 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0434\u043e\u0431\u0430\u0432\u043b\u044f\u0442\u044c \u043d\u043e\u0432\u044b\u0435 \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u0438 \u0432 \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0435 \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u044b \u043e\u0431\u044a\u0435\u043a\u0442\u043e\u0432 \u0431\u0435\u0437 \u0438\u0445 \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f. \u042d\u0442\u043e \u043e\u0434\u0438\u043d \u0438\u0437 \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u0432 \u0441\u043e\u0431\u043b\u044e\u0434\u0435\u043d\u0438\u044f \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u0430 \u043e\u0442\u043a\u0440\u044b\u0442\u043e\u0441\u0442\u0438\/\u0437\u0430\u043a\u0440\u044b\u0442\u043e\u0441\u0442\u0438 (open\/closed principle).<\/p><\/blockquote>\n<p><strong>\u041f\u0440\u0438\u043c\u0435\u0440<\/strong><\/p>\n<p>  <\/p>\n<p>\u0412\u043e\u0437\u044c\u043c\u0451\u043c \u0437\u043e\u043e\u043f\u0430\u0440\u043a: \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u0432\u0438\u0434\u043e\u0432 \u0436\u0438\u0432\u043e\u0442\u043d\u044b\u0445, \u0438 \u043d\u0430\u043c \u043d\u0443\u0436\u043d\u043e \u043f\u043e\u0441\u043b\u0443\u0448\u0430\u0442\u044c \u0438\u0437\u0434\u0430\u0432\u0430\u0435\u043c\u044b\u0435 \u0438\u043c\u0438 \u0437\u0432\u0443\u043a\u0438.<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">\/\/ \u041c\u0435\u0441\u0442\u043e \u043f\u043e\u0441\u0435\u0449\u0435\u043d\u0438\u044f interface Animal {     public function accept(AnimalOperation $operation); }  \/\/ \u041f\u043e\u0441\u0435\u0442\u0438\u0442\u0435\u043b\u044c interface AnimalOperation {     public function visitMonkey(Monkey $monkey);     public function visitLion(Lion $lion);     public function visitDolphin(Dolphin $dolphin); }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0420\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u0436\u0438\u0432\u043e\u0442\u043d\u044b\u0445:<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">class Monkey implements Animal {     public function shout()     {         echo 'Ooh oo aa aa!';     }      public function accept(AnimalOperation $operation)     {         $operation-&gt;visitMonkey($this);     } }  class Lion implements Animal {     public function roar()     {         echo 'Roaaar!';     }      public function accept(AnimalOperation $operation)     {         $operation-&gt;visitLion($this);     } }  class Dolphin implements Animal {     public function speak()     {         echo 'Tuut tuttu tuutt!';     }      public function accept(AnimalOperation $operation)     {         $operation-&gt;visitDolphin($this);     } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0420\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u043f\u043e\u0441\u0435\u0442\u0438\u0442\u0435\u043b\u044f:<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">class Speak implements AnimalOperation {     public function visitMonkey(Monkey $monkey)     {         $monkey-&gt;shout();     }      public function visitLion(Lion $lion)     {         $lion-&gt;roar();     }      public function visitDolphin(Dolphin $dolphin)     {         $dolphin-&gt;speak();     } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435:<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">$monkey = new Monkey(); $lion = new Lion(); $dolphin = new Dolphin();  $speak = new Speak();  $monkey-&gt;accept($speak);    \/\/ \u0423\u0430-\u0443\u0430-\u0443\u0430\u0430\u0430\u0430\u0430!     $lion-&gt;accept($speak);      \/\/ \u0420\u0440\u0440\u0440\u0440\u0440\u0440\u0440\u0440! $dolphin-&gt;accept($speak);   \/\/ \u0422\u0443\u0443\u0442 \u0442\u0443\u0442\u0442 \u0442\u0443\u0443\u0442\u0442!<\/code><\/pre>\n<p>  <\/p>\n<p>\u042d\u0442\u043e \u043c\u043e\u0436\u043d\u043e \u0431\u044b\u043b\u043e \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043f\u0440\u043e\u0441\u0442\u043e \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0438\u0435\u0440\u0430\u0440\u0445\u0438\u0438 \u043d\u0430\u0441\u043b\u0435\u0434\u043e\u0432\u0430\u043d\u0438\u044f, \u043d\u043e \u0442\u043e\u0433\u0434\u0430 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0431\u044b \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u0436\u0438\u0432\u043e\u0442\u043d\u044b\u0445 \u043f\u0440\u0438 \u043a\u0430\u0436\u0434\u043e\u043c \u0434\u043e\u0431\u0430\u0432\u043b\u0435\u043d\u0438\u0438 \u043a \u043d\u0438\u043c \u043d\u043e\u0432\u044b\u0445 \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0439. \u0410 \u0437\u0434\u0435\u0441\u044c \u043c\u0435\u043d\u044f\u0442\u044c \u0438\u0445 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e. \u041d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u044b \u043c\u043e\u0436\u0435\u043c \u0434\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u0436\u0438\u0432\u043e\u0442\u043d\u044b\u043c \u043f\u0440\u044b\u0436\u043a\u0438, \u043f\u0440\u043e\u0441\u0442\u043e \u0441\u043e\u0437\u0434\u0430\u0432 \u043d\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u0441\u0435\u0442\u0438\u0442\u0435\u043b\u044f:<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">class Jump implements AnimalOperation {     public function visitMonkey(Monkey $monkey)     {         echo 'Jumped 20 feet high! on to the tree!';     }      public function visitLion(Lion $lion)     {         echo 'Jumped 7 feet! Back on the ground!';     }      public function visitDolphin(Dolphin $dolphin)     {         echo 'Walked on water a little and disappeared';     } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435:<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">$jump = new Jump();  $monkey-&gt;accept($speak);   \/\/ Ooh oo aa aa! $monkey-&gt;accept($jump);    \/\/ Jumped 20 feet high! on to the tree!  $lion-&gt;accept($speak);     \/\/ Roaaar! $lion-&gt;accept($jump);      \/\/ Jumped 7 feet! Back on the ground!  $dolphin-&gt;accept($speak);  \/\/ Tuut tutt tuutt! $dolphin-&gt;accept($jump);   \/\/ Walked on water a little and disappeared<\/code><\/pre>\n<p>  <\/p>\n<h3 id=\"imagehttpshabrastorageorgfiles0ff1d477c0ff1d477ce4d4e2ca81d427ce072a757png-strategiya\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/0ff\/1d4\/77c\/0ff1d477ce4d4e2ca81d427ce072a757.png\" alt=\"image\"\/> \u0421\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f<\/h3>\n<p>  <\/p>\n<p><strong>\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u044f<\/strong><\/p>\n<p>  <\/p>\n<p>\u0412\u043e\u0437\u044c\u043c\u0451\u043c \u043f\u0440\u0438\u043c\u0435\u0440 \u0441 \u043f\u0443\u0437\u044b\u0440\u044c\u043a\u043e\u0432\u043e\u0439 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u043e\u0439. \u041c\u044b \u0435\u0451 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b\u0438, \u043d\u043e \u0441 \u0440\u043e\u0441\u0442\u043e\u043c \u043e\u0431\u044a\u0451\u043c\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430 \u0441\u0442\u0430\u043b\u0430 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c\u0441\u044f \u043e\u0447\u0435\u043d\u044c \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u043e. \u0422\u043e\u0433\u0434\u0430 \u043c\u044b \u0441\u0434\u0435\u043b\u0430\u043b\u0438 \u0431\u044b\u0441\u0442\u0440\u0443\u044e \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0443 (Quick sort). \u0410\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u0440\u0430\u0431\u043e\u0442\u0430\u0435\u0442 \u0431\u044b\u0441\u0442\u0440\u0435\u0435 \u043d\u0430 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u043e\u0431\u044a\u0451\u043c\u0430\u0445, \u043d\u043e \u043d\u0430 \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0445 \u043e\u043d \u043e\u0447\u0435\u043d\u044c \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0439. \u0422\u043e\u0433\u0434\u0430 \u043c\u044b \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043b\u0438 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044e, \u043f\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0434\u043b\u044f \u043c\u0430\u043b\u0435\u043d\u044c\u043a\u0438\u0445 \u043e\u0431\u044a\u0451\u043c\u043e\u0432 \u0434\u0430\u043d\u043d\u044b\u0445 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u0435\u0442\u0441\u044f \u043f\u0443\u0437\u044b\u0440\u044c\u043a\u043e\u0432\u0430\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430, \u0430 \u0434\u043b\u044f \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u2014 \u0431\u044b\u0441\u0442\u0440\u0430\u044f.<\/p>\n<p>  <\/p>\n<p><strong>\u0412\u043a\u0440\u0430\u0442\u0446\u0435<\/strong><\/p>\n<p>  <\/p>\n<p>\u0428\u0430\u0431\u043b\u043e\u043d \u00ab\u0421\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f\u00bb \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0430\u0442\u044c\u0441\u044f \u043c\u0435\u0436\u0434\u0443 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430\u043c\u0438 \u0438\u043b\u0438 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f\u043c\u0438 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u0438.<\/p>\n<p>  <\/p>\n<p><strong>\u0412\u0438\u043a\u0438\u043f\u0435\u0434\u0438\u044f<\/strong><\/p>\n<p>  <\/p>\n<blockquote><p>\u0428\u0430\u0431\u043b\u043e\u043d \u00ab\u0421\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f\u00bb \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043f\u0440\u0438 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0438 \u0432\u044b\u0431\u0438\u0440\u0430\u0442\u044c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430.<\/p><\/blockquote>\n<p><strong>\u041f\u0440\u0438\u043c\u0435\u0440<\/strong><\/p>\n<p>  <\/p>\n<p>\u0412\u043e\u0437\u044c\u043c\u0451\u043c \u0432\u044b\u0448\u0435\u043e\u043f\u0438\u0441\u0430\u043d\u043d\u044b\u0439 \u043f\u0440\u0438\u043c\u0435\u0440. \u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0438 \u0438 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u0441\u0430\u043c\u0438\u0445 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0439.<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">interface SortStrategy {     public function sort(array $dataset): array; }  class BubbleSortStrategy implements SortStrategy {     public function sort(array $dataset): array     {         echo &quot;Sorting using bubble sort&quot;;          \/\/ Do sorting         return $dataset;     } }  class QuickSortStrategy implements SortStrategy {     public function sort(array $dataset): array     {         echo &quot;Sorting using quick sort&quot;;          \/\/ Do sorting         return $dataset;     } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u043c \u043a\u043b\u0438\u0435\u043d\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0430\u0448\u0443 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044e.<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">class Sorter {     protected $sorter;      public function __construct(SortStrategy $sorter)     {         $this-&gt;sorter = $sorter;     }      public function sort(array $dataset): array     {         return $this-&gt;sorter-&gt;sort($dataset);     } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435:<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">$dataset = [1, 5, 4, 3, 2, 8];  $sorter = new Sorter(new BubbleSortStrategy()); $sorter-&gt;sort($dataset); \/\/ Output : \u041f\u0443\u0437\u044b\u0440\u044c\u043a\u043e\u0432\u0430\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430  $sorter = new Sorter(new QuickSortStrategy()); $sorter-&gt;sort($dataset); \/\/ Output : \u0411\u044b\u0441\u0442\u0440\u0430\u044f \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0430<\/code><\/pre>\n<p>  <\/p>\n<h3 id=\"imagehttpshabrastorageorgfiles375200f5a375200f5aa9c444aa74eac8813c00af5png-sostoyanie\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/375\/200\/f5a\/375200f5aa9c444aa74eac8813c00af5.png\" alt=\"image\"\/> \u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435<\/h3>\n<p>  <\/p>\n<p><strong>\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u044f<\/strong><\/p>\n<p>  <\/p>\n<p>\u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0432 \u0433\u0440\u0430\u0444\u0438\u0447\u0435\u0441\u043a\u043e\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440\u0435 \u0432\u044b \u0432\u044b\u0431\u0440\u0430\u043b\u0438 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442 \u00ab\u041a\u0438\u0441\u0442\u044c\u00bb. \u041e\u043d\u0430 \u043c\u0435\u043d\u044f\u0435\u0442 \u0441\u0432\u043e\u0451 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0432 \u0437\u0430\u0432\u0438\u0441\u0438\u043c\u043e\u0441\u0442\u0438 \u043e\u0442 \u043d\u0430\u0441\u0442\u0440\u043e\u0439\u043a\u0438 \u0446\u0432\u0435\u0442\u0430: \u0442. \u0435. \u0440\u0438\u0441\u0443\u0435\u0442 \u043b\u0438\u043d\u0438\u044e \u0432\u044b\u0431\u0440\u0430\u043d\u043d\u043e\u0433\u043e \u0446\u0432\u0435\u0442\u0430.<\/p>\n<p>  <\/p>\n<p><strong>\u0412\u043a\u0440\u0430\u0442\u0446\u0435<\/strong><\/p>\n<p>  <\/p>\n<p>\u0428\u0430\u0431\u043b\u043e\u043d \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u043c\u0435\u043d\u044f\u0442\u044c \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u043a\u043b\u0430\u0441\u0441\u0430 \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f.<\/p>\n<p>  <\/p>\n<p><strong>\u0412\u0438\u043a\u0438\u043f\u0435\u0434\u0438\u044f<\/strong><\/p>\n<p>  <\/p>\n<blockquote><p>\u0428\u0430\u0431\u043b\u043e\u043d \u00ab\u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u00bb \u0440\u0435\u0430\u043b\u0438\u0437\u0443\u0435\u0442 \u043c\u0430\u0448\u0438\u043d\u0443 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u043e\u0431\u044a\u0435\u043a\u0442\u043d\u043e \u043e\u0440\u0438\u0435\u043d\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u043d\u044b\u043c \u0441\u043f\u043e\u0441\u043e\u0431\u043e\u043c. \u042d\u0442\u043e \u0434\u043e\u0441\u0442\u0438\u0433\u0430\u0435\u0442\u0441\u044f \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e:  <\/p>\n<ul>\n<li>\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f \u0432 \u0432\u0438\u0434\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u043d\u043e\u0433\u043e \u043a\u043b\u0430\u0441\u0441\u0430 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0430 \u0448\u0430\u0431\u043b\u043e\u043d\u0430 \u00ab\u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u00bb, <\/li>\n<li>\u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0435\u0440\u0435\u0445\u043e\u0434\u043e\u0432 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 (state transitions) \u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u043e\u043c \u0432\u044b\u0437\u043e\u0432\u0430 \u043c\u0435\u0442\u043e\u0434\u043e\u0432, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u0432\u044b\u0448\u0435\u0441\u0442\u043e\u044f\u0449\u0438\u043c \u043a\u043b\u0430\u0441\u0441\u043e\u043c (superclass).<\/li>\n<\/ul>\n<p>  \u0428\u0430\u0431\u043b\u043e\u043d \u00ab\u0421\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435\u00bb \u2014 \u044d\u0442\u043e \u0432 \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043f\u043b\u0430\u043d\u0435 \u0448\u0430\u0431\u043b\u043e\u043d \u00ab\u0421\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u044f\u00bb, \u043f\u0440\u0438 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e \u043f\u0435\u0440\u0435\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u0435 \u0442\u0435\u043a\u0443\u0449\u0435\u0439 \u0441\u0442\u0440\u0430\u0442\u0435\u0433\u0438\u0438 \u0441 \u043f\u043e\u043c\u043e\u0449\u044c\u044e \u0432\u044b\u0437\u043e\u0432\u0430 \u043c\u0435\u0442\u043e\u0434\u043e\u0432, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u044b\u0445 \u0432 \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u0430.<\/p><\/blockquote>\n<p><strong>\u041f\u0440\u0438\u043c\u0435\u0440<\/strong><\/p>\n<p>  <\/p>\n<p>\u0422\u0435\u043a\u0441\u0442\u043e\u0432\u044b\u0439 \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u043c\u0435\u043d\u044f\u0435\u0442 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0435 \u0442\u0435\u043a\u0441\u0442\u0430, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442\u0435, \u0442. \u0435. \u0435\u0441\u043b\u0438 \u0432\u044b\u0431\u0440\u0430\u043d\u043e \u043f\u043e\u043b\u0443\u0436\u0438\u0440\u043d\u043e\u0435 \u043d\u0430\u0447\u0435\u0440\u0442\u0430\u043d\u0438\u0435 \u2014 \u0442\u043e \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440 \u043f\u0435\u0447\u0430\u0442\u0430\u0435\u0442 \u043f\u043e\u043b\u0443\u0436\u0438\u0440\u043d\u044b\u043c \u0438 \u0442. \u0434.<\/p>\n<p>  <\/p>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u0441\u0434\u0435\u043b\u0430\u0435\u043c \u0438\u043d\u0442\u0435\u0440\u0444\u0435\u0439\u0441 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u0439 \u0438 \u0441\u0430\u043c\u0438 \u0441\u043e\u0441\u0442\u043e\u044f\u043d\u0438\u044f:<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">interface WritingState {     public function write(string $words); }  class UpperCase implements WritingState {     public function write(string $words)     {         echo strtoupper($words);     } }  class LowerCase implements WritingState {     public function write(string $words)     {         echo strtolower($words);     } }  class Default implements WritingState {     public function write(string $words)     {         echo $words;     } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0421\u0434\u0435\u043b\u0430\u0435\u043c \u0440\u0435\u0434\u0430\u043a\u0442\u043e\u0440:<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">class TextEditor {     protected $state;      public function __construct(WritingState $state)     {         $this-&gt;state = $state;     }      public function setState(WritingState $state)     {         $this-&gt;state = $state;     }      public function type(string $words)     {         $this-&gt;state-&gt;write($words);     } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435:<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">$editor = new TextEditor(new Default());  $editor-&gt;type('First line');  $editor-&gt;setState(new UpperCase());  $editor-&gt;type('Second line'); $editor-&gt;type('Third line');  $editor-&gt;setState(new LowerCase());  $editor-&gt;type('Fourth line'); $editor-&gt;type('Fifth line');  \/\/ Output: \/\/ First line \/\/ SECOND LINE \/\/ THIRD LINE \/\/ fourth line \/\/ fifth line<\/code><\/pre>\n<p>  <\/p>\n<h3 id=\"imagehttpshabrastorageorgfilesdc3e84492dc3e84492b0f47e0954fd7454fcad987png-shablonnyy-metod\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/dc3\/e84\/492\/dc3e84492b0f47e0954fd7454fcad987.png\" alt=\"image\"\/> \u0428\u0430\u0431\u043b\u043e\u043d\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434<\/h3>\n<p>  <\/p>\n<p><strong>\u0410\u043d\u0430\u043b\u043e\u0433\u0438\u044f<\/strong><\/p>\n<p>  <\/p>\n<p>\u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0432\u044b \u0441\u043e\u0431\u0440\u0430\u043b\u0438\u0441\u044c \u0441\u0442\u0440\u043e\u0438\u0442\u044c \u0434\u043e\u043c\u0430. \u042d\u0442\u0430\u043f\u044b \u0431\u0443\u0434\u0443\u0442 \u0442\u0430\u043a\u0438\u043c\u0438:<\/p>\n<p>  <\/p>\n<ul>\n<li>\u041f\u043e\u0434\u0433\u043e\u0442\u043e\u0432\u043a\u0430 \u0444\u0443\u043d\u0434\u0430\u043c\u0435\u043d\u0442\u0430.<\/li>\n<li>\u0412\u043e\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u0435 \u0441\u0442\u0435\u043d.<\/li>\n<li>\u041d\u0430\u0441\u0442\u0438\u043b \u043a\u0440\u044b\u0448\u0438.<\/li>\n<li>\u041d\u0430\u0441\u0442\u0438\u043b \u043f\u0435\u0440\u0435\u043a\u0440\u044b\u0442\u0438\u0439.<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u041f\u043e\u0440\u044f\u0434\u043e\u043a \u044d\u0442\u0430\u043f\u043e\u0432 \u043d\u0438\u043a\u043e\u0433\u0434\u0430 \u043d\u0435 \u043c\u0435\u043d\u044f\u0435\u0442\u0441\u044f. \u0412\u044b \u043d\u0435 \u043d\u0430\u0441\u0442\u0435\u043b\u0438\u0442\u0435 \u043a\u0440\u044b\u0448\u0443 \u0434\u043e \u0432\u043e\u0437\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0441\u0442\u0435\u043d \u2014 \u0438 \u0442. \u0434. \u041d\u043e \u043a\u0430\u0436\u0434\u044b\u0439 \u044d\u0442\u0430\u043f \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u0435\u0442\u0441\u044f: \u0441\u0442\u0435\u043d\u044b, \u043d\u0430\u043f\u0440\u0438\u043c\u0435\u0440, \u043c\u043e\u0436\u043d\u043e \u0432\u043e\u0437\u0432\u0435\u0441\u0442\u0438 \u0438\u0437 \u0434\u0435\u0440\u0435\u0432\u0430, \u043a\u0438\u0440\u043f\u0438\u0447\u0430 \u0438\u043b\u0438 \u0433\u0430\u0437\u043e\u0431\u0435\u0442\u043e\u043d\u0430.<\/p>\n<p>  <\/p>\n<p><strong>\u0412\u043a\u0440\u0430\u0442\u0446\u0435<\/strong><\/p>\n<p>  <\/p>\n<p>\u00ab\u0428\u0430\u0431\u043b\u043e\u043d\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434\u00bb \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u043a\u0430\u0440\u043a\u0430\u0441 \u0432\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u044f \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0433\u043e \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430, \u043d\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044e \u0441\u0430\u043c\u0438\u0445 \u044d\u0442\u0430\u043f\u043e\u0432 \u0434\u0435\u043b\u0435\u0433\u0438\u0440\u0443\u0435\u0442 \u0434\u043e\u0447\u0435\u0440\u043d\u0438\u043c \u043a\u043b\u0430\u0441\u0441\u0430\u043c.<\/p>\n<p>  <\/p>\n<p><strong>\u0412\u0438\u043a\u0438\u043f\u0435\u0434\u0438\u044f<\/strong><\/p>\n<p>  <\/p>\n<blockquote><p>\u00ab\u0428\u0430\u0431\u043b\u043e\u043d\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434\u00bb \u2014 \u044d\u0442\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0447\u0435\u0441\u043a\u0438\u0439 \u0448\u0430\u0431\u043b\u043e\u043d, \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u044e\u0449\u0438\u0439 \u043e\u0441\u043d\u043e\u0432\u0443 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0438 \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u043d\u0430\u0441\u043b\u0435\u0434\u043d\u0438\u043a\u0430\u043c \u043f\u0435\u0440\u0435\u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0448\u0430\u0433\u0438 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430, \u043d\u0435 \u0438\u0437\u043c\u0435\u043d\u044f\u044f \u0435\u0433\u043e \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0443 \u0432 \u0446\u0435\u043b\u043e\u043c.<\/p><\/blockquote>\n<p><strong>\u041f\u0440\u0438\u043c\u0435\u0440<\/strong><\/p>\n<p>  <\/p>\n<p>\u0414\u043e\u043f\u0443\u0441\u0442\u0438\u043c, \u0443 \u043d\u0430\u0441 \u0435\u0441\u0442\u044c \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u044b\u0439 \u0438\u043d\u0441\u0442\u0440\u0443\u043c\u0435\u043d\u0442, \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u044e\u0449\u0438\u0439 \u0442\u0435\u0441\u0442\u0438\u0440\u043e\u0432\u0430\u0442\u044c, \u043f\u0440\u043e\u0432\u043e\u0434\u0438\u0442\u044c \u043a\u043e\u043d\u0442\u0440\u043e\u043b\u044c \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0430 \u043a\u043e\u0434\u0430 (lint), \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0442\u044c \u0441\u0431\u043e\u0440\u043a\u0443, \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u043e\u0432\u0430\u0442\u044c \u043e\u0442\u0447\u0451\u0442\u044b \u0441\u0431\u043e\u0440\u043a\u0438 (\u043e\u0442\u0447\u0451\u0442\u044b \u043e \u043f\u043e\u043a\u0440\u044b\u0442\u0438\u0438 \u043a\u043e\u0434\u0430, \u043e \u043a\u0430\u0447\u0435\u0441\u0442\u0432\u0435 \u043a\u043e\u0434\u0430 \u0438 \u0442. \u0434.), \u0430 \u0442\u0430\u043a\u0436\u0435 \u0440\u0430\u0437\u0432\u0451\u0440\u0442\u044b\u0432\u0430\u0442\u044c \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u043d\u0430 \u0442\u0435\u0441\u0442\u043e\u0432\u043e\u043c \u0441\u0435\u0440\u0432\u0435\u0440\u0435.<\/p>\n<p>  <\/p>\n<p>\u0421\u043d\u0430\u0447\u0430\u043b\u0430 \u043d\u0430\u0448 \u0431\u0430\u0437\u043e\u0432\u044b\u0439 \u043a\u043b\u0430\u0441\u0441 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u044f\u0435\u0442 \u043a\u0430\u0440\u043a\u0430\u0441 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c\u0430 \u0441\u0431\u043e\u0440\u043a\u0438.<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">abstract class Builder {      \/\/ \u0428\u0430\u0431\u043b\u043e\u043d\u043d\u044b\u0439 \u043c\u0435\u0442\u043e\u0434     final public function build()     {         $this-&gt;test();         $this-&gt;lint();         $this-&gt;assemble();         $this-&gt;deploy();     }      abstract public function test();     abstract public function lint();     abstract public function assemble();     abstract public function deploy(); }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0422\u0435\u043f\u0435\u0440\u044c \u0441\u043e\u0437\u0434\u0430\u0451\u043c \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438:<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">class AndroidBuilder extends Builder {     public function test()     {         echo 'Running android tests';     }      public function lint()     {         echo 'Linting the android code';     }      public function assemble()     {         echo 'Assembling the android build';     }      public function deploy()     {         echo 'Deploying android build to server';     } }  class IosBuilder extends Builder {     public function test()     {         echo 'Running ios tests';     }      public function lint()     {         echo 'Linting the ios code';     }      public function assemble()     {         echo 'Assembling the ios build';     }      public function deploy()     {         echo 'Deploying ios build to server';     } }<\/code><\/pre>\n<p>  <\/p>\n<p>\u0418\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u0435:<\/p>\n<p>  <\/p>\n<pre><code class=\"php\">$androidBuilder = new AndroidBuilder(); $androidBuilder-&gt;build();  \/\/ Output: \/\/ \u0412\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 Android-\u0442\u0435\u0441\u0442\u043e\u0432 \/\/ \u041b\u0438\u043d\u0442\u0438\u043d\u0433 Android-\u043a\u043e\u0434\u0430 \/\/ \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 Android-\u0441\u0431\u043e\u0440\u043a\u0438 \/\/ \u0420\u0430\u0437\u0432\u0451\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435 Android-\u0441\u0431\u043e\u0440\u043a\u0438 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435  $iosBuilder = new IosBuilder(); $iosBuilder-&gt;build();  \/\/ Output: \/\/ \u0412\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 iOS-\u0442\u0435\u0441\u0442\u043e\u0432 \/\/ \u041b\u0438\u043d\u0442\u0438\u043d\u0433 iOS-\u043a\u043e\u0434\u0430 \/\/ \u0421\u043e\u0437\u0434\u0430\u043d\u0438\u0435 iOS-\u0441\u0431\u043e\u0440\u043a\u0438 \/\/ \u0420\u0430\u0437\u0432\u0451\u0440\u0442\u044b\u0432\u0430\u043d\u0438\u0435 iOS-\u0441\u0431\u043e\u0440\u043a\u0438 \u043d\u0430 \u0441\u0435\u0440\u0432\u0435\u0440\u0435<\/code><\/pre>\n<p>  <\/p>\n<h3 id=\"imagehttpshabrastorageorgfiles2e7927eb22e7927eb26194671b5d86ec03e6ebc94png-zakruglyaemsya\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/2e7\/927\/eb2\/2e7927eb26194671b5d86ec03e6ebc94.png\" alt=\"image\"\/> \u0417\u0430\u043a\u0440\u0443\u0433\u043b\u044f\u0435\u043c\u0441\u044f<\/h3>\n<p>  <\/p>\n<p>\u041d\u0430 \u044d\u0442\u043e\u043c \u043e\u0431\u0437\u043e\u0440 \u0437\u0430\u043a\u043e\u043d\u0447\u0435\u043d. \u042f \u043f\u0440\u043e\u0434\u043e\u043b\u0436\u0443 \u0435\u0433\u043e \u0443\u043b\u0443\u0447\u0448\u0430\u0442\u044c \u0438 \u043f\u043b\u0430\u043d\u0438\u0440\u0443\u044e \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0433\u043b\u0430\u0432\u044b \u043f\u0440\u043e \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u044b\u0435 \u0448\u0430\u0431\u043b\u043e\u043d\u044b. \u0422\u0430\u043a \u0447\u0442\u043e \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u0437\u0430\u0433\u043b\u044f\u0434\u044b\u0432\u0430\u0439\u0442\u0435.<\/p>\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:\/\/habrahabr.ru\/post\/325492\/\"> https:\/\/habrahabr.ru\/post\/325492\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/bb8\/685\/ef6\/bb8685ef636143ac9713d0131774c7e0.JPG\" alt=\"image\"\/><\/p>\n<p>  <\/p>\n<p>\u0428\u0430\u0431\u043b\u043e\u043d\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u2014 \u044d\u0442\u043e \u0441\u043f\u043e\u0441\u043e\u0431 \u0440\u0435\u0448\u0435\u043d\u0438\u044f \u043f\u0435\u0440\u0438\u043e\u0434\u0438\u0447\u0435\u0441\u043a\u0438 \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0449\u0438\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c. \u0422\u043e\u0447\u043d\u0435\u0435, \u044d\u0442\u043e \u0440\u0443\u043a\u043e\u0432\u043e\u0434\u0441\u0442\u0432\u0430 \u043f\u043e \u0440\u0435\u0448\u0435\u043d\u0438\u044e \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u044b\u0445 \u043f\u0440\u043e\u0431\u043b\u0435\u043c. \u042d\u0442\u043e \u043d\u0435 \u043a\u043b\u0430\u0441\u0441\u044b, \u043f\u0430\u043a\u0435\u0442\u044b \u0438\u043b\u0438 \u0431\u0438\u0431\u043b\u0438\u043e\u0442\u0435\u043a\u0438, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0432\u044b \u043c\u043e\u0436\u0435\u0442\u0435 \u0432\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0432 \u0441\u0432\u043e\u0451 \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0435 \u0438 \u043e\u0436\u0438\u0434\u0430\u0442\u044c \u0432\u043e\u043b\u0448\u0435\u0431\u0441\u0442\u0432\u0430. <\/p>\n<p>  <\/p>\n<p>\u041a\u0430\u043a \u0441\u043a\u0430\u0437\u0430\u043d\u043e \u0432 \u0412\u0438\u043a\u0438\u043f\u0435\u0434\u0438\u0438:<\/p>\n<p>  <\/p>\n<blockquote><p>\u0412 \u043f\u0440\u043e\u0433\u0440\u0430\u043c\u043c\u043d\u043e\u0439 \u0438\u043d\u0436\u0435\u043d\u0435\u0440\u0438\u0438 \u0448\u0430\u0431\u043b\u043e\u043d \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u0439 \u2014 \u044d\u0442\u043e \u043c\u043d\u043e\u0433\u043e\u043a\u0440\u0430\u0442\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0435\u043c\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435 \u0440\u0435\u0433\u0443\u043b\u044f\u0440\u043d\u043e \u0432\u043e\u0437\u043d\u0438\u043a\u0430\u044e\u0449\u0435\u0439 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0432 \u0440\u0430\u043c\u043a\u0430\u0445 \u043e\u043f\u0440\u0435\u0434\u0435\u043b\u0451\u043d\u043d\u043e\u0433\u043e \u043a\u043e\u043d\u0442\u0435\u043a\u0441\u0442\u0430 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u044b \u043f\u0440\u0438\u043b\u043e\u0436\u0435\u043d\u0438\u044f. \u0428\u0430\u0431\u043b\u043e\u043d \u2014 \u044d\u0442\u043e \u043d\u0435 \u0437\u0430\u043a\u043e\u043d\u0447\u0435\u043d\u043d\u043e\u0435 \u0430\u0440\u0445\u0438\u0442\u0435\u043a\u0442\u0443\u0440\u043d\u043e\u0435 \u0440\u0435\u0448\u0435\u043d\u0438\u0435, \u043a\u043e\u0442\u043e\u0440\u043e\u0435 \u043c\u043e\u0436\u043d\u043e \u043d\u0430\u043f\u0440\u044f\u043c\u0443\u044e \u043f\u0440\u0435\u043e\u0431\u0440\u0430\u0437\u043e\u0432\u0430\u0442\u044c \u0432 \u0438\u0441\u0445\u043e\u0434\u043d\u044b\u0439 \u0438\u043b\u0438 \u043c\u0430\u0448\u0438\u043d\u043d\u044b\u0439 \u043a\u043e\u0434. \u042d\u0442\u043e \u043e\u043f\u0438\u0441\u0430\u043d\u0438\u0435 \u043f\u043e\u0434\u0445\u043e\u0434\u0430 \u043a \u0440\u0435\u0448\u0435\u043d\u0438\u044e \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u043c\u043e\u0436\u043d\u043e \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u0432 \u0440\u0430\u0437\u043d\u044b\u0445 \u0441\u0438\u0442\u0443\u0430\u0446\u0438\u044f\u0445.<\/p><\/blockquote>\n<p>  <\/p>\n<h3 id=\"imagehttpshabrastorageorgfiles408734bfb408734bfb5ec43878ea5b9a8b22fd277png-budte-ostorozhny\"><img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/408\/734\/bfb\/408734bfb5ec43878ea5b9a8b22fd277.png\" alt=\"image\"\/> \u0411\u0443\u0434\u044c\u0442\u0435 \u043e\u0441\u0442\u043e\u0440\u043e\u0436\u043d\u044b<\/h3>\n<p>  <\/p>\n<ul>\n<li>\u0428\u0430\u0431\u043b\u043e\u043d\u044b \u043f\u0440\u043e\u0435\u043a\u0442\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u044f \u2014 \u043d\u0435 \u00ab\u0441\u0435\u0440\u0435\u0431\u0440\u044f\u043d\u0430\u044f \u043f\u0443\u043b\u044f\u00bb.<\/li>\n<li>\u041d\u0435 \u043f\u044b\u0442\u0430\u0439\u0442\u0435\u0441\u044c \u0432\u043d\u0435\u0434\u0440\u044f\u0442\u044c \u0438\u0445 \u043f\u0440\u0438\u043d\u0443\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e, \u043f\u043e\u0441\u043b\u0435\u0434\u0441\u0442\u0432\u0438\u044f \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u043d\u0435\u0433\u0430\u0442\u0438\u0432\u043d\u044b\u043c\u0438. \u041f\u043e\u043c\u043d\u0438\u0442\u0435, \u0447\u0442\u043e \u0448\u0430\u0431\u043b\u043e\u043d\u044b \u2014 \u044d\u0442\u043e \u0441\u043f\u043e\u0441\u043e\u0431\u044b <strong>\u0440\u0435\u0448\u0435\u043d\u0438\u044f<\/strong>, \u0430 \u043d\u0435 <strong>\u043f\u043e\u0438\u0441\u043a\u0430<\/strong> \u043f\u0440\u043e\u0431\u043b\u0435\u043c. \u0422\u0430\u043a \u0447\u0442\u043e \u043d\u0435 \u043f\u0435\u0440\u0435\u043c\u0443\u0434\u0440\u0438\u0442\u0435.<\/li>\n<li>\u0415\u0441\u043b\u0438 \u043f\u0440\u0438\u043c\u0435\u043d\u044f\u0442\u044c \u0438\u0445 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u043e \u0438 \u0432 \u043d\u0443\u0436\u043d\u044b\u0445 \u043c\u0435\u0441\u0442\u0430\u0445, \u043e\u043d\u0438 \u043c\u043e\u0433\u0443\u0442 \u043e\u043a\u0430\u0437\u0430\u0442\u044c\u0441\u044f \u0441\u043f\u0430\u0441\u0435\u043d\u0438\u0435\u043c. \u0412 \u043f\u0440\u043e\u0442\u0438\u0432\u043d\u043e\u043c \u0441\u043b\u0443\u0447\u0430\u0435 \u0443 \u0432\u0430\u0441 \u0431\u0443\u0434\u0435\u0442 \u0435\u0449\u0451 \u0431\u043e\u043b\u044c\u0448\u0435 \u043f\u0440\u043e\u0431\u043b\u0435\u043c.<\/li>\n<\/ul>\n<p>  <\/p>\n<p>\u0412 \u0441\u0442\u0430\u0442\u044c\u0435 \u043f\u0440\u0438\u0432\u0435\u0434\u0435\u043d\u044b \u043f\u0440\u0438\u043c\u0435\u0440\u044b \u043d\u0430 PHP 7, \u043d\u043e \u043f\u0443\u0441\u0442\u044c \u0432\u0430\u0441 \u044d\u0442\u043e \u043d\u0435 \u0441\u043c\u0443\u0449\u0430\u0435\u0442, \u0432\u0435\u0434\u044c \u0437\u0430\u043b\u043e\u0436\u0435\u043d\u043d\u044b\u0435 \u0432 \u0448\u0430\u0431\u043b\u043e\u043d\u0430\u0445 \u043f\u0440\u0438\u043d\u0446\u0438\u043f\u044b \u043d\u0435\u0438\u0437\u043c\u0435\u043d\u043d\u044b. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, <strong>\u0432\u043d\u0435\u0434\u0440\u044f\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0434\u0440\u0443\u0433\u0438\u0445 \u044f\u0437\u044b\u043a\u043e\u0432<\/strong>.<\/p>\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-284728","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/284728","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=284728"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/284728\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=284728"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=284728"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=284728"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}