<?xml version='1.0' encoding='UTF-8'?><?xml-stylesheet href="http://www.blogger.com/styles/atom.css" type="text/css"?><feed xmlns='http://www.w3.org/2005/Atom' xmlns:openSearch='http://a9.com/-/spec/opensearchrss/1.0/' xmlns:blogger='http://schemas.google.com/blogger/2008' xmlns:georss='http://www.georss.org/georss' xmlns:gd="http://schemas.google.com/g/2005" xmlns:thr='http://purl.org/syndication/thread/1.0'><id>tag:blogger.com,1999:blog-1877956521828775519</id><updated>2024-09-14T20:57:26.675-07:00</updated><category term="php"/><category term="ООП"/><category term="паттерны проектирования"/><category term="design pattern"/><category term="шаблоны проектирования"/><category term="Serializable"/><category term="__get"/><category term="__set"/><category term="abstract factory"/><category term="decorator"/><category term="doctrine"/><category term="json"/><category term="migration"/><category term="propel"/><category term="symfony"/><category term="web-разработка"/><category term="yii"/><category term="zend"/><category term="абстрактная фабрика"/><category term="декоратор"/><category term="ленивая инициализация"/><category term="миграции"/><category term="модели"/><category term="отложенная инициализация"/><category term="сериализация"/><title type='text'>Программирование. Web-Разработка</title><subtitle type='html'>Блог посвящен web-разработке, программированию на языке php, а также различным практическим подходам, применяемых в ходе разработки web-приложений.</subtitle><link rel='http://schemas.google.com/g/2005#feed' type='application/atom+xml' href='http://funny-prog.blogspot.com/feeds/posts/default'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1877956521828775519/posts/default?redirect=false'/><link rel='alternate' type='text/html' href='http://funny-prog.blogspot.com/'/><link rel='hub' href='http://pubsubhubbub.appspot.com/'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/08816609634090005372</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><generator version='7.00' uri='http://www.blogger.com'>Blogger</generator><openSearch:totalResults>6</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><entry><id>tag:blogger.com,1999:blog-1877956521828775519.post-4619080482623640493</id><published>2012-03-27T12:16:00.000-07:00</published><updated>2012-03-28T02:01:04.684-07:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="doctrine"/><category scheme="http://www.blogger.com/atom/ns#" term="migration"/><category scheme="http://www.blogger.com/atom/ns#" term="php"/><category scheme="http://www.blogger.com/atom/ns#" term="propel"/><category scheme="http://www.blogger.com/atom/ns#" term="symfony"/><category scheme="http://www.blogger.com/atom/ns#" term="yii"/><category scheme="http://www.blogger.com/atom/ns#" term="zend"/><category scheme="http://www.blogger.com/atom/ns#" term="миграции"/><title type='text'>PHP. Механизм миграций в различных фреймворках.</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;h2 style=&quot;text-align: left;&quot;&gt;
















&lt;b&gt;Понятие миграции&lt;/b&gt;&lt;/h2&gt;
&lt;b&gt;Миграции&lt;/b&gt; - это механизм, позволяющий инкапсулировать в себе изменения базы данных.&lt;br&gt;
Чем удобны миграции:&lt;br&gt;
&lt;ol style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Миграции можно применять и откатывать.&lt;/li&gt;
&lt;li&gt;С помощью этого механизма базу данных проекта можно очень быстро привести в актуальное состояние на любом компьютере. Обычно, можно просто выполнить одну команду для обновления базы. Это удобно как при командной разработке, так и при обновлении сайта на сервере.&lt;/li&gt;
&lt;li&gt;Не надо хранить множество sql файлов для отслеживания изменений БД и потом разбираться, какой именно sql файл надо применить. Механизмы миграций берут эту задачу на себя.&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
Основные операции, которые должна реализовывать каждая миграция:&lt;/div&gt;
&lt;div&gt;
&lt;ol style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;up - накатывает изменения текущей миграции.&lt;/li&gt;
&lt;li&gt;down - откатывает изменения миграции.&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;a href=&quot;http://funny-prog.blogspot.com/2012/03/php.html#more&quot;&gt;Дальше »&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://funny-prog.blogspot.com/feeds/4619080482623640493/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://funny-prog.blogspot.com/2012/03/php.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1877956521828775519/posts/default/4619080482623640493'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1877956521828775519/posts/default/4619080482623640493'/><link rel='alternate' type='text/html' href='http://funny-prog.blogspot.com/2012/03/php.html' title='PHP. Механизм миграций в различных фреймворках.'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/08816609634090005372</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1877956521828775519.post-7401234336840273746</id><published>2011-12-03T10:46:00.001-08:00</published><updated>2011-12-03T11:25:24.923-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="php"/><category scheme="http://www.blogger.com/atom/ns#" term="web-разработка"/><category scheme="http://www.blogger.com/atom/ns#" term="ООП"/><category scheme="http://www.blogger.com/atom/ns#" term="ленивая инициализация"/><category scheme="http://www.blogger.com/atom/ns#" term="отложенная инициализация"/><category scheme="http://www.blogger.com/atom/ns#" term="паттерны проектирования"/><title type='text'>PHP. Ленивая инициализация (Lazy initialization)</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Сегодня я хочу рассказать о ленивой, или &lt;a href=&quot;http://ru.wikipedia.org/wiki/%D0%9E%D1%82%D0%BB%D0%BE%D0%B6%D0%B5%D0%BD%D0%BD%D0%B0%D1%8F_%D0%B8%D0%BD%D0%B8%D1%86%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F&quot; target=&quot;_blank&quot;&gt;отложенной&lt;/a&gt; инициализации.&lt;br&gt;
&lt;br&gt;
Наиболее часто в web-разработке применяется принцип создания объекта непосредственно перед обращением к нему (здесь понимается, что создание объекта - трудоёмкая операция). Что нам это дает:&lt;br&gt;
&lt;ol style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Приложение быстрее инициализируется.&lt;/li&gt;
&lt;li&gt;Приложение может быстрее работать.&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
Рассмотрим на примере ленивой инициализации соединения с базой данных. Если, например, приложение генерирует страницу и ему не понадобилась база, то соединение с ней и не будет создано, а, значит, общее время работы скрипта уменьшится.&lt;br&gt;
&lt;br&gt;
Для чего можно применять ленивую инициализацию?&lt;br&gt;
&lt;ol&gt;
&lt;li&gt;Как я уже сказал, для создания соединения с базой данных.&lt;/li&gt;
&lt;li&gt;Для обращения к данным из кэша - если они не нужны для генерации страницы, то и не следуют обращаться к кэшу.&lt;/li&gt;
&lt;li&gt;Для получения данных от других веб-приложений. Причина аналогична.&lt;/li&gt;
&lt;li&gt;Для загрузки изображений при работе с gd2 или какой - либо иной графической библиотекой php.&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;a href=&quot;http://funny-prog.blogspot.com/2011/12/php.html#more&quot;&gt;Дальше »&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://funny-prog.blogspot.com/feeds/7401234336840273746/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://funny-prog.blogspot.com/2011/12/php.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1877956521828775519/posts/default/7401234336840273746'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1877956521828775519/posts/default/7401234336840273746'/><link rel='alternate' type='text/html' href='http://funny-prog.blogspot.com/2011/12/php.html' title='PHP. Ленивая инициализация (Lazy initialization)'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/08816609634090005372</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1877956521828775519.post-3834551119817308915</id><published>2011-11-30T11:06:00.001-08:00</published><updated>2011-12-03T10:28:35.757-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="__get"/><category scheme="http://www.blogger.com/atom/ns#" term="__set"/><category scheme="http://www.blogger.com/atom/ns#" term="php"/><category scheme="http://www.blogger.com/atom/ns#" term="модели"/><title type='text'>PHP. Разработка классов - моделей с использованием магических методов __set и __get</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
Сегодня я покажу небольшой пример разработки классов - моделей.&lt;br&gt;
&lt;br&gt;
&lt;b&gt;Модель &lt;/b&gt;- это класс, который используется для хранения данных о каких-либо сущностях, например, о пользователях, статьях, платежах и т.д.&lt;br&gt;
&lt;br&gt;
Разработка классов - моделей с помощью волшебных методов __set, __get, __isset, __unset часто используется во многих веб-приложениях и фреймворках, например, в известном фреймворке Yii.&lt;br&gt;
&lt;br&gt;
Для простоты, будем использовать только первые два волшебных метода. С их помощью мы сможем написать сеттеры и геттеры для доступа к данным, а сами данные будем хранить в массиве.&lt;br&gt;
&lt;br&gt;
&lt;/div&gt;&lt;a href=&quot;http://funny-prog.blogspot.com/2011/11/php-set-get.html#more&quot;&gt;Дальше »&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://funny-prog.blogspot.com/feeds/3834551119817308915/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://funny-prog.blogspot.com/2011/11/php-set-get.html#comment-form' title='Комментарии: 4'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1877956521828775519/posts/default/3834551119817308915'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1877956521828775519/posts/default/3834551119817308915'/><link rel='alternate' type='text/html' href='http://funny-prog.blogspot.com/2011/11/php-set-get.html' title='PHP. Разработка классов - моделей с использованием магических методов __set и __get'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/08816609634090005372</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>4</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1877956521828775519.post-1399182420474353065</id><published>2011-11-26T09:30:00.001-08:00</published><updated>2011-11-27T08:58:57.802-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="json"/><category scheme="http://www.blogger.com/atom/ns#" term="php"/><category scheme="http://www.blogger.com/atom/ns#" term="Serializable"/><category scheme="http://www.blogger.com/atom/ns#" term="сериализация"/><title type='text'>PHP. Сериализация объектов в JSON</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: x-large;&quot;&gt;Несколько слов о сериализации&lt;/span&gt;&lt;br&gt;
Простыми словами, &lt;b&gt;сериализация&lt;/b&gt; - это процесс представления какого - либо объекта в виде строки или последовательности бит, как написано в &lt;a href=&quot;http://ru.wikipedia.org/wiki/%D0%A1%D0%B5%D1%80%D0%B8%D0%B0%D0%BB%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F&quot; target=&quot;_blank&quot;&gt;википедии&lt;/a&gt;.&lt;br&gt;
&lt;br&gt;
В примере я покажу, как проводить сериализацию объектов в JSON формат.&lt;br&gt;
Сериализация очень удобна для:&lt;br&gt;
&lt;ol style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;Обмена данными между клиентской и серверной частью приложения (js и php), поскольку JSON - есть &lt;a href=&quot;http://ru.wikipedia.org/wiki/JSON&quot; target=&quot;_blank&quot;&gt;нотация объектов в JavaScript&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;В сериализованном виде удобно обмениваться информация между web - приложениями. Тут использование JSON не обязательно, можно, например, использовать XML.&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
&lt;/div&gt;&lt;/div&gt;&lt;a href=&quot;http://funny-prog.blogspot.com/2011/11/php-json.html#more&quot;&gt;Дальше »&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://funny-prog.blogspot.com/feeds/1399182420474353065/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://funny-prog.blogspot.com/2011/11/php-json.html#comment-form' title='Комментарии: 0'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1877956521828775519/posts/default/1399182420474353065'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1877956521828775519/posts/default/1399182420474353065'/><link rel='alternate' type='text/html' href='http://funny-prog.blogspot.com/2011/11/php-json.html' title='PHP. Сериализация объектов в JSON'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/08816609634090005372</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>0</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1877956521828775519.post-4103325747796522348</id><published>2011-11-22T10:43:00.001-08:00</published><updated>2011-11-23T11:40:41.551-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="decorator"/><category scheme="http://www.blogger.com/atom/ns#" term="design pattern"/><category scheme="http://www.blogger.com/atom/ns#" term="php"/><category scheme="http://www.blogger.com/atom/ns#" term="ООП"/><category scheme="http://www.blogger.com/atom/ns#" term="декоратор"/><category scheme="http://www.blogger.com/atom/ns#" term="паттерны проектирования"/><category scheme="http://www.blogger.com/atom/ns#" term="шаблоны проектирования"/><title type='text'>PHP. Логгирование и мониторинг памяти с помощью паттерна Decorator(декторатор)</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
В этой статье я хочу показать, как можно логгировать обращение к методам объектов и потребление памяти с помощью паттерна Декоратор.&lt;br&gt;
&lt;br&gt;
Подробное описание паттерна, а также классическую реализацию паттерна можно &lt;a href=&quot;http://ru.wikipedia.org/wiki/%D0%94%D0%B5%D0%BA%D0%BE%D1%80%D0%B0%D1%82%D0%BE%D1%80_(%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F)&quot; target=&quot;_blank&quot;&gt;посмотреть на вики.&lt;/a&gt;&lt;br&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;http://upload.wikimedia.org/wikipedia/ru/0/00/Decorator_template.png&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;183&quot; src=&quot;http://upload.wikimedia.org/wikipedia/ru/0/00/Decorator_template.png&quot; width=&quot;320&quot;&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;UML диаграмма паттерна Декоратор&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
А теперь я покажу пару примеров, как с помощью декораторов можно логгировать внешние вызовы методов класса, а также анализировать, как обращение к объекту влияет на расход оперативной памяти.&lt;br&gt;
&lt;br&gt;
&lt;b&gt;P.S.&lt;/b&gt; Предложенная реализация будет отличаться от классической, поскольку декоратор не будет наследован отдекорируемого класса. Это даёт как преимущества, так и определённые недостатки. Обсудим их после примера.&lt;br&gt;
&lt;br&gt;
&lt;/div&gt;&lt;a href=&quot;http://funny-prog.blogspot.com/2011/11/php-decorator.html#more&quot;&gt;Дальше »&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://funny-prog.blogspot.com/feeds/4103325747796522348/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://funny-prog.blogspot.com/2011/11/php-decorator.html#comment-form' title='Комментарии: 2'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1877956521828775519/posts/default/4103325747796522348'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1877956521828775519/posts/default/4103325747796522348'/><link rel='alternate' type='text/html' href='http://funny-prog.blogspot.com/2011/11/php-decorator.html' title='PHP. Логгирование и мониторинг памяти с помощью паттерна Decorator(декторатор)'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/08816609634090005372</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><thr:total>2</thr:total></entry><entry><id>tag:blogger.com,1999:blog-1877956521828775519.post-447684040183352695</id><published>2011-11-20T12:07:00.000-08:00</published><updated>2011-11-23T10:35:24.490-08:00</updated><category scheme="http://www.blogger.com/atom/ns#" term="abstract factory"/><category scheme="http://www.blogger.com/atom/ns#" term="design pattern"/><category scheme="http://www.blogger.com/atom/ns#" term="php"/><category scheme="http://www.blogger.com/atom/ns#" term="ООП"/><category scheme="http://www.blogger.com/atom/ns#" term="абстрактная фабрика"/><category scheme="http://www.blogger.com/atom/ns#" term="паттерны проектирования"/><category scheme="http://www.blogger.com/atom/ns#" term="шаблоны проектирования"/><title type='text'>PHP. Паттерн Abstract Factory(Абстрактная фабрика).</title><content type='html'>&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;div dir=&quot;ltr&quot; style=&quot;text-align: left;&quot; trbidi=&quot;on&quot;&gt;
&lt;h2 class=&quot;Apple-style-span&quot;&gt;



















&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-size: x-large;&quot;&gt;
Общие сведения о паттерне Абстрактная фабрика&lt;/span&gt;&lt;/h2&gt;
Итак, я начинаю цикл статей, посвященных использованию паттернов проектирования при разработке web-приложений на PHP.&lt;br&gt;
&lt;br&gt;
Описание паттерна &lt;a href=&quot;http://ru.wikipedia.org/wiki/%D0%90%D0%B1%D1%81%D1%82%D1%80%D0%B0%D0%BA%D1%82%D0%BD%D0%B0%D1%8F_%D1%84%D0%B0%D0%B1%D1%80%D0%B8%D0%BA%D0%B0_(%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F)&quot; target=&quot;_blank&quot;&gt;абстрактная фабрика&lt;/a&gt; можно посмотреть в википедии. Если коротко, то это порождающий паттерн, который позволяет создавать целые семейства объектов. При этом, подобный подход гарантирует сочетаемость объектов, т.е. можно динамически менять одно семейство компонентов на другое при сохранении работоспособности приложения.&lt;br&gt;
&lt;br&gt;
К &lt;a href=&quot;http://ru.wikipedia.org/wiki/%D0%90%D0%B1%D1%81%D1%82%D1%80%D0%B0%D0%BA%D1%82%D0%BD%D0%B0%D1%8F_%D1%84%D0%B0%D0%B1%D1%80%D0%B8%D0%BA%D0%B0_(%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F)#.D0.9F.D0.BB.D1.8E.D1.81.D1.8B&quot; target=&quot;_blank&quot;&gt;плюсам паттерна&lt;/a&gt; относят:&lt;br&gt;
&lt;ol style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: white; font-family: sans-serif; line-height: 19px;&quot;&gt;изоляция конкретных классов&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: sans-serif;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;line-height: 19px;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: white;&quot;&gt;упрощение замены семейств продуктов&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: sans-serif;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;line-height: 19px;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: white;&quot;&gt;гарантированная сочетаемость продуктов&lt;/span&gt;&lt;/span&gt;&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: sans-serif;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;line-height: 19px;&quot;&gt;&lt;a href=&quot;http://ru.wikipedia.org/wiki/%D0%90%D0%B1%D1%81%D1%82%D1%80%D0%B0%D0%BA%D1%82%D0%BD%D0%B0%D1%8F_%D1%84%D0%B0%D0%B1%D1%80%D0%B8%D0%BA%D0%B0_(%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD_%D0%BF%D1%80%D0%BE%D0%B5%D0%BA%D1%82%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D1%8F)#.D0.9C.D0.B8.D0.BD.D1.83.D1.81.D1.8B&quot; target=&quot;_blank&quot;&gt;Минус&lt;/a&gt; только 1:&lt;/span&gt;&lt;/span&gt;&lt;/div&gt;
&lt;div&gt;
&lt;ol style=&quot;text-align: left;&quot;&gt;
&lt;li&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;background-color: white; font-family: sans-serif; line-height: 19px;&quot;&gt;сложно добавить поддержку нового вида продуктов.&lt;/span&gt;&lt;/li&gt;
&lt;/ol&gt;
&lt;table align=&quot;center&quot; cellpadding=&quot;0&quot; cellspacing=&quot;0&quot; class=&quot;tr-caption-container&quot; style=&quot;margin-left: auto; margin-right: auto; text-align: center;&quot;&gt;&lt;tbody&gt;
&lt;tr&gt;&lt;td style=&quot;text-align: center;&quot;&gt;&lt;a href=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiWPBPi7skJwCoMoWxamdZ12tGazMJhyphenhyphenYHgQLQMvXgCx_Il5nRn-3c__n2OsXRp1AffL95o6Hsw82qxx5pAoFPQ7QUDs_l9_bygUquGBhxTM-uc-YEOsFYIeTWlWovqfWfcxBZiavNL7E/s1600/677px-Abstract_factory_UML.svg.jpg&quot; imageanchor=&quot;1&quot; style=&quot;margin-left: auto; margin-right: auto;&quot;&gt;&lt;img border=&quot;0&quot; height=&quot;211&quot; src=&quot;https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiWPBPi7skJwCoMoWxamdZ12tGazMJhyphenhyphenYHgQLQMvXgCx_Il5nRn-3c__n2OsXRp1AffL95o6Hsw82qxx5pAoFPQ7QUDs_l9_bygUquGBhxTM-uc-YEOsFYIeTWlWovqfWfcxBZiavNL7E/s320/677px-Abstract_factory_UML.svg.jpg&quot; width=&quot;320&quot;&gt;&lt;/a&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&quot;tr-caption&quot; style=&quot;text-align: center;&quot;&gt;UML диаграмма паттерна Абстрактная фабрика&lt;/td&gt;&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;div class=&quot;separator&quot; style=&quot;clear: both; text-align: center;&quot;&gt;
&lt;/div&gt;
&lt;div&gt;
&lt;span class=&quot;Apple-style-span&quot; style=&quot;font-family: sans-serif;&quot;&gt;&lt;span class=&quot;Apple-style-span&quot; style=&quot;line-height: 19px;&quot;&gt;&lt;/span&gt;&lt;/span&gt;&lt;br&gt;
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;&lt;a href=&quot;http://funny-prog.blogspot.com/2011/11/php-abstract-factory.html#more&quot;&gt;Дальше »&lt;/a&gt;</content><link rel='replies' type='application/atom+xml' href='http://funny-prog.blogspot.com/feeds/447684040183352695/comments/default' title='Комментарии к сообщению'/><link rel='replies' type='text/html' href='http://funny-prog.blogspot.com/2011/11/php-abstract-factory.html#comment-form' title='Комментарии: 10'/><link rel='edit' type='application/atom+xml' href='http://www.blogger.com/feeds/1877956521828775519/posts/default/447684040183352695'/><link rel='self' type='application/atom+xml' href='http://www.blogger.com/feeds/1877956521828775519/posts/default/447684040183352695'/><link rel='alternate' type='text/html' href='http://funny-prog.blogspot.com/2011/11/php-abstract-factory.html' title='PHP. Паттерн Abstract Factory(Абстрактная фабрика).'/><author><name>Anonymous</name><uri>http://www.blogger.com/profile/08816609634090005372</uri><email>noreply@blogger.com</email><gd:image rel='http://schemas.google.com/g/2005#thumbnail' width='16' height='16' src='https://img1.blogblog.com/img/b16-rounded.gif'/></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEiiWPBPi7skJwCoMoWxamdZ12tGazMJhyphenhyphenYHgQLQMvXgCx_Il5nRn-3c__n2OsXRp1AffL95o6Hsw82qxx5pAoFPQ7QUDs_l9_bygUquGBhxTM-uc-YEOsFYIeTWlWovqfWfcxBZiavNL7E/s72-c/677px-Abstract_factory_UML.svg.jpg" height="72" width="72"/><thr:total>10</thr:total></entry></feed>