Как класс бетона перевести в марку: Класс бетона и марка. Класс и марка бетона таблица, соотношение класса бетона и марки соответствие.
перевод марок, классификация, таблица, ГОСТ
Поскольку в состав затвердевшего бетона входят компоненты, являющиеся по своей природе разнородными, он является материалом конгломератного (составного типа). Поэтому одним из главных свойств, по которым можно определить качественным ли он является, можно назвать адгезию. В данной статье будет рассказано о том, что такое класс бетона, а также коснемся и других характеристик материала.
На фото – проверка материала на прочность
Качество материала
Под адгезией понимается то, насколько хорошо цементный камень скрепляется с частицами заполнителей. Кроме того, к основным качествам можно также отнести:
- морозостойкость;
- водонепроницаемость;
- прочность на сжатие и растяжение.
Когда материал находится в проектном возрасте, о его прочностных характеристиках можно судить по последним параметрам.
Поэтому стоит отметить, что во время приготовления он получается неоднородным.
Здесь представлено соответствие марок и классов бетона
Колебания прочности снижаются при качественной подготовки смеси, а также при более высокой культуре строительства. Поэтому стоит запомнить, что изготовленный материал должен не только иметь средний заданный показатель, но и иметь равномерное его распределение по всей поверхности.
Определение класса
Учесть вышеописанные колебания можно в таком показателе, как класс, под которым понимается процентный показатель какого-либо свойства. К примеру, если указано, что материал имеет класс прочности 0,95, то в 95 случаях и 100 он будет иметь такой показатель.
Стоит отметить, что согласно ГОСТу, классификация бетона состоит из 18 основных классов показателей прочности на сжатие. При этом в начале название класса указывается В1, после чего идет числовое значение предела прочности, отображаемое в МПа.
Классификация изделий
Для более точного восприятия стоит привести пример.
Кроме того, существуют и другие классы прочности:
- индекс В,, обозначает осевое растяжение;
- индекс Btb отображает предел растяжения при изгибе.
Помните, что предел прочности на сжатие может в 20 раз превышать аналогичное значение прочности на растяжение. Поэтому при строительстве используется стальная арматура, которая повышает несущую способность материала, цена при этом увеличивается.
Таблица марок и классов бетона по прочности на сжатие
Определение марки
Как утверждает стандарт СЭВ 1406-78, главным показателем прочности изделий является именно их класс. Если же во время проектирования различных изделий не учитывался данный стандарт, их прочность описывается при помощи марки.
Под ней понимают какое-либо его свойство, выраженное в численной характеристике, для расчета которой используются средние показанные результаты образцов во время испытаний.
Для обозначения марки используют значения, полученные во время испытаний:
| Минимальное | Используется, если она определяется по таким показателям, как:· водонепроницаемость;· морозостойкость; · прочность. |
| Максимальное | Применяется при определении бетона по средней плотности. |
Совет: знайте, что помощи марки нельзя отобразить колебания прочности по всему объему бетонного изделия.
Как производить перевод марок бетона в классы
Марка по прочности на сжатие
- Это одна из наиболее часто используемых характеристик бетонных конструкций.
- Инструкция требует для ее определения использовать образцы в виде куба, имеющих длину одной стороны 150 мм.
- Испытание проводится на протяжении условного проектного возраста – в большинстве случаев это 4 недели.
Совет: если берется серия из трех образцов, предел прочности рассчитывается по двум наибольшим из них.
Для его выражения используются такие единицы – кгс/см2.
- Специалисты выделяют всего 17 марок тяжелого бетона в зависимости от его прочности на сжатие. Для их обозначения используется индекс «М», после которого указывается число. К примеру, марка М450 означает, что такой бетон гарантирует минимальный предел прочности на сжатие в 450 кгс/см2.
- Если же принимать во внимание прочность на осевое растяжение, то его марок гораздо больше – от Pt5 до Pt50 (прибавляя каждый раз по 5 кгс/см
2). К примеру, марка бетона Pt30 будет означать, что он способен выдержать осевое растяжение до 30 кгс/см2. - Для бетона, которые будет использоваться во время изготовления изгибаемых ж/б конструкций, существует также характеристика растяжения при изгибе, которая отображается при помощи индекса «Ptb».
Совет: не всегда следует проводить параллели между маркой бетона и его классом.
Класс поверхности бетона по СНиПу имеет 4 параметра
Классы и марки
Дело в том, что многое зависит от того, насколько материал является однородным.
Для обозначения этой величины используется коэффициент вариации.
Чем ниже его числовое значение, тем большей однородностью обладает бетон. При снижении данного показателя, снижаются, соответственно, класс и марка материала. К примеру, М300, имеющий коэффициент вариации в 18%, получит класс В15, а вот при снижении до значения в 5%, класс повысится до В20.
Совет: результаты исследований доказывают, что во время изготовления бетонной смеси необходимо добиваться ее максимальной однородности.
На числовое значение прочности оказывают влияние множество факторов. Наибольшее — качество исходных компонентов, а также такой показатель, как пористость.
Изготовление раствора
Для набора прочности материала, изготовленного при помощи портландцемента, требуется значительное количество времени. Кроме того, для нормального протекания процесса требуется соблюдение определенных условий.
Морозостойкость
При помощи такого показателя, как марка бетона по морозостойкости можно определить, сколько циклов замораживания и оттаивания может выдержать 28-дневный материал, теряя при этом не более 15% показателя прочности на сжатие.
Совет: чтобы бетон обладал хорошими морозостойкими свойствами, в его составе должен быть качественный портландцемент, а также его различные модификации – сульфатостойкий, гидрофобный и т.п.
При этом существуют определенные ограничения по процентному содержанию трехкальциевого алюмината в портландцементе.
К примеру, для:
- F200 допускается не более 7% такого вещества;
- F300 – до 5%, и т.д.
Крайне нежелательным является присутствие в цементе активных минеральных добавок, так как в результате их использования увеличивается потребность в воде. А вот снижение водопотребности достигается за счет применения поверхностно-активных веществ.
Работа с раствором в мороз
Совет: в сооружениях гидротехнического типа, обладающих маркой морозостойкости F 300, а также заполнителем диаметром не более 20 мм, объем вовлеченного воздуха должен находиться в пределах 2-4%
Вот небольшая инструкция, которой следует придерживаться:
- Для получения высококачественного морозостойкого бетона должно соблюдаться максимально точное соотношение всех компонентов.

- Их необходимо тщательно перемешать своими руками, получив максимально однородную смесь.
- После этого уплотнить.
- Обеспечить необходимые хорошие условия во время процесса затвердевания.
Совет:следите, чтобы не происходило тепловое расширение составляющих бетона, а значение воды и воздуха находились в допустимых пределах.
В ситуациях, когда осуществляется изготовление деталей, обладающих высокой степенью морозостойкости (F200 и выше), стоит помнить, что материал должен твердеть в условиях положительного значения температуры окружающей среды. Кроме того, его влажность должна сохраняться на протяжении около 10 дней.
Водопроницаемость
Марка по такому показателю, как водонепроницаемость определяется путем испытаний материала на ограниченную проницаемость во время одностороннего давления напора воды. Для ее обозначения используют индекс «W», после которого идет число.
Водопроницаемость материала
Оно обозначает максимальное давление (в кгс/см2), которое может выдержать исследуемый образец, диаметр и высота которого составляют 150 мм, во время определенных испытаний.
К примеру, маркаW4 выдерживает напор воды в 4 кгс/см2. Всего существует 10 марок – от W2 до W20 (прибавляя по 2 кгс/см2).
Существуют методы, благодаря которым можно увеличить водонепроницаемость смеси во время ее приготовления, укладки и затвердевания бетона, а также методы, которые могут повысить такой показатель уже затвердевшего материала.
Вывод
В данной статье было рассказано о классах и марках бетона, которые читаются важными показателями. Они дают возможность правильного подбора материала для ремонтных и строительных работ. Также вы узнали ГОСТ на класс бетона и индексы, которыми обозначается он и марки.Видео в этой статье поможет найти вам дополнительную информацию по этой тематике.
Класс бетона — новые (С) и старые (В) обозначения
Проектировщику не обойтись без понимания, что такое бетон, какие бывают его классы.
Основные положения о бетоне регламентированы в ДБН В.2.6-98:2009 «Бетонные и железобетонные конструкции», которые в Украине был введен в действие с 2011 года. По факту этот нормативный документ является переводом аналогичного европейского стандарта.
Для некоторых проектировщиков стало удивлением новое обозначение класса бетона. Даже строительные организации, которые прекрасно разбираются в классах, начинают делать ошибки. С целью внести ясность в обозначение класса бетона написан этот материал.
Соотношение между классами и марками бетона
Следует отметить, что марку бетона практически никто не использует. Однако для понимания некоторых старых типовых проектов и прочих инженерных решений следует запомнить, где можно найти таблицу соотношений по прочности на сжатие.
Если раньше класс бетона обозначался как В20, тот теперь этот же класс бетона обозначается как С15/20. Дело в том, что в некоторых европейских странах, таких как Великобритания, для проверки прочности бетона на сжатие используют цилиндр.
Пример. Бетон кл. С12/15 означает:
- минимальная прочность цилиндра на сжатие 12 МПа;
- минимальная прочность кубика на сжатие 15 МПа.
15 МПа – это и есть тот привычный кл. В15, которым пользуются у нас.
| Класс бетона по прочности (С) по ДБН | Класс бетона по прочности (В) по СНиП | Средняя прочность бетона данного класса R | Ближайшая марка бетона по прочности М, кгс/см2 | Отклонение ближайшей марки бетона от средней прочности класса R — M / R * 100% |
|
| Мпа | кг/см2 | ||||
| — | В0,35 | 0,49 | 5,01 | М5 | +0,2 |
| — | В0,75 | 1,06 | 10,85 | М10 | +7,8 |
| — | В1 | 1,42 | 14,47 | М15 | -0,2 |
| — | В1,5 | 2,05 | 20,85 | М25 | -1,9 |
| — | В2 | 2,84 | 28,94 | М25 | +13,6 |
| — | В2,5 | 3,21 | 32,74 | М35 | -6,9 |
| — | В3,5 | 4,50 | 45,84 | М50 | -9,1 |
| — | В5 | 6,42 | 65,48 | М75 | -14,5 |
| — | В7,5 | 9,64 | 98,23 | М100 | -1,8 |
| С8/10 | В10 | 12,85 | 130,97 | М150 | -14,5 |
| С10/12,5 | В12,5 | 16,10 | 163,71 | М150 | +8,4 |
| С12/15 | В15 | 19,27 | 196,45 | М200 | -1,8 |
| С16/20 | В20 | 25,70 | 261,93 | М250 | +4,5 |
| С18/22,5 | В22,5 | 28,90 | 294,5 | М300 | +1,9 |
| С20/25 | В25 | 32,40 | 327,42 | М350 | -6,9 |
| С25/30 | В30 | 38,54 | 392,90 | М400 | -1,8 |
| С28/35 | В35 | 44,96 | 458,39 | М450 | +1,8 |
| С32/40 | В40 | 51,39 | 523,87 | М550 | -5,1 |
| С35/45 | В45 | 57,82 | 589,4 | М600 | +1,8 |
| С40/50 | В50 | 64,24 | 654,8 | М700 | +6,9 |
| С45/55 | В55 | 70,66 | 720,3 | М700 | -2,8 |
Среднюю прочность бетона каждого класса определяют при нормативном коэффициенте вариации, равном v=13,5% для конструктивных бетонов и v=18% для теплоизоляционных бетонов по формуле
где В – значение класса бетона, МПа:
0,0980665 – переходной коэффициент от МПа к кг/см2>.
Класс бетона и его применение в строительстве
Следует понимать, что помимо класса бетона следует учитывать его морозостойкость (F), водонепроницаемость (W) и ряд других показателей. Часто застройщики ищут в интернете информацию о классе бетона, который необходимо использовать для той или иной конструкции. Прямого ответа на этот вопрос нет. Необходимо разбирать каждый индивидуальный случай с учетом действующих нагрузок на конструкцию. Однако существуют общие рекомендации по применению класса бетона.
С8/10 (В10) используют для строительства бетонных подготовок под монолитные конструкции. Делает это для того, чтобы при укладке бетона «молочко» не убежало в грунт. Также бетонная подготовка позволяет более точно контролировать необходимые величины защитного слоя. В некоторых случаях этот класс бетона используется для строительства стяжек и дорожек.
С12/15 (В15) часто используется в частном строительства для всех конструкций, которые воспринимают сугубо вертикальную нагрузку.
Это могут быть фундаменты, стены, колонны, заборы и т.д. Не рекомендуется применять для бетонирования сложных элементов здания.
С16/20 (В20) практически повсеместно используется для бетонирования монолитных конструкций, от фундаментов до подпорных стен. Может быть использован для бетонирования плит перекрытия, которые не несут большой нагрузки.
С20/25 (В25) используется для изготовления свайных фундаментов, ростверков под большие сооружения, ригелей и балок с большой величиной пролета. Бассейны, вертикальные стены и перекрытия также строят из бетона этого класса.
С25/30 (В30) применяется для возведения мостовых и гидротехнических сооружений, где требуется высокая прочность бетона. Также этот класс бетона может быть назначен при сложных эксплуатационных условиях конструкций.
Таблица возможных вариантов применения класса бетона
| Бетонирование конструкций | Класс бетона |
| Класс бетона для армопояса | С16/20 (В20) или С20/25 (В25) |
| Класс бетона для пола гаража | С12/15 (В15) или С16/20 (В20) |
| Класс бетона для фундамента | С12/15 (В15) или С16/20 (В20) |
| Класс бетона для монолитного перекрытия | В основном С20/25 (В25) |
| Класс бетона для колонн | С16/20 (В20) или С20/25 (В25) |
| Класс бетона для ростверка | В основном С20/25 (В25) |
| Класс бетона для подпорных стен | С16/20 (В20) или С20/25 (В25) |
| Класс бетона для отмостки | С8/10 (В10) |
| Класс бетона для ленточного фундамента | С12/15 (В15) или С16/20 (В20) |
| Класс бетона для буронабивных свай | В основном С20/25 (В25) |
| Класс бетона для полов | С8/10 (В10) или С12/15 (В15) |
| Класс бетона для монолитных стен | В основном С20/25 (В25) |
| Класс бетона для тротуарной плитки | С8/10 (В10) или С12/15 (В15) |
| Класс бетона для стяжки | С8/10 (В10) или С12/15 (В15) |
| Класс бетона для бассейна | С25/30 (В30) |
© Стаття є власністю recenz.
com.ua. Використання матеріалу дозволяється тільки зі встановленням активного зворотного посилання.
Добавить комментарий
Документация JDK 20 — Главная
- Главная
- Ява
- Java SE
- 20
Обзор
- Прочтите меня
- Примечания к выпуску
- Что нового
- Руководство по миграции
- Загрузить JDK
- Руководство по установке
- Формат строки версии
Инструменты
- Технические характеристики инструментов JDK
- Руководство пользователя JShell
- Руководство по JavaDoc
- Руководство пользователя средства упаковки
Язык и библиотеки
- Обновления языка
- Основные библиотеки
- HTTP-клиент JDK
- Учебники по Java
- Модульный JDK
- Руководство программиста API бортового регистратора
- Руководство по интернационализации
Технические характеристики
- Документация API
- Язык и ВМ
- Имена стандартных алгоритмов безопасности Java
- банок
- Собственный интерфейс Java (JNI)
- Инструментальный интерфейс JVM (JVM TI)
- Сериализация
- Проводной протокол отладки Java (JDWP)
- Спецификация комментариев к документации для стандартного доклета
- Прочие характеристики
Безопасность
- Руководство по безопасному кодированию
- Руководство по безопасности
Виртуальная машина HotSpot
- Руководство по виртуальной машине Java
- Настройка сборки мусора
Управление и устранение неполадок
- Руководство по устранению неполадок
- Руководство по мониторингу и управлению
- Руководство по JMX
Client Technologies
- Руководство по специальным возможностям Java
Заводской метод
/ Шаблоны проектирования / Креативные шаблоны
Также известен как: Виртуальный конструктор
Intent Фабричный метод — это шаблон проектирования создания, который предоставляет интерфейс для создания объектов в суперклассе, но позволяет подклассам изменять тип создаваемых объектов.
Представьте, что вы создаете приложение для управления логистикой. Первая версия вашего приложения может обрабатывать перевозки только грузовиками, поэтому большая часть вашего кода находится внутри класса Truck .
Через некоторое время ваше приложение становится довольно популярным. Каждый день вы получаете десятки запросов от морских транспортных компаний на включение морской логистики в приложение.
Добавить новый класс в программу не так просто, если остальная часть кода уже связана с существующими классами.
Отличные новости, правда? Но как насчет кода? В настоящее время большая часть вашего кода связана с классом Truck . Добавление кораблей в приложение потребует внесения изменений во всю кодовую базу. Более того, если позже вы решите добавить в приложение еще один вид транспорта, вам, вероятно, придется вносить все эти изменения заново.
В итоге вы получите довольно неприятный код, пронизанный условными операторами, которые меняют поведение приложения в зависимости от класса транспортных объектов.
Шаблон Factory Method предлагает заменить прямые вызовы построения объектов (с использованием оператора new ) вызовами специального factory метода. Не беспокойтесь: объекты по-прежнему создаются с помощью оператора new , но он вызывается из фабричного метода. Объекты, возвращаемые фабричным методом, часто называют продуктами .
Подклассы могут изменять класс объектов, возвращаемых фабричным методом.
На первый взгляд это изменение может показаться бессмысленным: мы просто перенесли вызов конструктора из одной части программы в другую. Однако учтите следующее: теперь вы можете переопределить фабричный метод в подклассе и изменить класс продуктов, создаваемых этим методом.
Однако есть небольшое ограничение: подклассы могут возвращать разные типы продуктов, только если эти продукты имеют общий базовый класс или интерфейс. Кроме того, фабричный метод в базовом классе должен иметь тип возвращаемого значения, объявленный как этот интерфейс.
Все продукты должны иметь один и тот же интерфейс.
Например, классы Truck и Ship должны реализовывать интерфейс Transport , который объявляет метод delivery . Каждый класс реализует этот метод по-своему: грузовики доставляют грузы по суше, корабли доставляют грузы по морю. Фабричный метод в классе RoadLogistics возвращает объекты грузовиков, тогда как фабричный метод в классе SeaLogistics возвращает суда.
Поскольку все классы продуктов реализуют общий интерфейс, вы можете передавать их объекты в клиентский код, не нарушая его.
Код, использующий фабричный метод (часто называемый клиентским кодом ), не видит разницы между фактическими продуктами, возвращаемыми различными подклассами. Клиент рассматривает все продукты как абстрактные Транспорт . Клиент знает, что все транспортные объекты должны иметь метод доставки , но как именно он работает, клиенту не важно.
Продукт объявляет интерфейс, общий для всех объектов, которые могут быть созданы создателем и его подклассами.
Бетонные изделия — это различные реализации интерфейса изделия.
Класс Creator объявляет фабричный метод, который возвращает новые объекты продукта. Важно, чтобы возвращаемый тип этого метода соответствовал интерфейсу продукта.
Вы можете объявить фабричный метод как
abstract, чтобы заставить все подклассы реализовать свои собственные версии метода. В качестве альтернативы метод базовой фабрики может возвращать некоторый тип продукта по умолчанию.Обратите внимание, что, несмотря на название, создание продукта является , а не основной обязанностью создателя. Обычно класс создателя уже имеет некоторую базовую бизнес-логику, связанную с продуктами. Фабричный метод помогает отделить эту логику от конкретных классов продуктов.
Вот аналогия: крупная компания по разработке программного обеспечения может иметь отдел обучения программистов. Однако основной функцией компании в целом по-прежнему является написание кода, а не подготовка программистов.Concrete Creators переопределяет метод базовой фабрики, чтобы он возвращал другой тип продукта.
Обратите внимание, что фабричный метод не должен постоянно создавать новых экземпляров. Он также может возвращать существующие объекты из кэша, пула объектов или другого источника.
В этом примере показано, как Factory Method можно использовать для создания кроссплатформенных элементов пользовательского интерфейса без привязки клиентского кода к конкретным классам пользовательского интерфейса.
Пример межплатформенного диалогового окна.
Базовый класс Dialog использует различные элементы пользовательского интерфейса для отображения своего окна.
В разных операционных системах эти элементы могут выглядеть немного по-разному, но они все равно должны вести себя одинаково. Кнопка в Windows по-прежнему остается кнопкой в Linux.
Когда фабричный метод вступает в игру, вам не нужно переписывать класс Dialog логику класса для каждой операционной системы. Если мы объявим фабричный метод, который производит кнопки внутри базы Dialog , мы можем позже создать подкласс, который возвращает кнопки в стиле Windows из фабричного метода. Затем подкласс наследует большую часть кода базового класса, но благодаря фабричному методу может отображать на экране кнопки, похожие на Windows.
Чтобы этот шаблон работал, базовый класс Dialog должен работать с абстрактными кнопками: базовым классом или интерфейсом, которому следуют все конкретные кнопки. Таким образом, код внутри Dialog остается функциональным, независимо от того, с каким типом кнопок он работает.
Конечно, вы можете применить этот подход и к другим элементам пользовательского интерфейса.
Однако с каждым новым фабричным методом, который вы добавляете в диалог Dialog , вы приближаетесь к шаблону абстрактной фабрики. Не бойтесь, мы поговорим об этом шаблоне позже.
// Класс-создатель объявляет фабричный метод, который должен
// вернуть объект класса продукта. Подклассы создателя
// обычно обеспечивают реализацию этого метода.
диалоговое окно класса
// Создатель также может предоставить некоторую реализацию по умолчанию
// фабричного метода.
абстрактный метод createButton():Button
// Обратите внимание, что, несмотря на название, основной
// ответственность не в создании продуктов. Обычно это
// содержит некоторую базовую бизнес-логику, основанную на продукте
// объекты, возвращаемые фабричным методом. Подклассы могут
// косвенно изменить эту бизнес-логику, переопределив
// фабричный метод и возврат другого типа продукта
// от него.
метод рендеринга ()
// Вызов фабричного метода для создания объекта продукта.
Кнопка okButton = createButton()
// Теперь используйте продукт.
okButton.onClick(closeDialog)
okButton.render()
// Создатели бетона переопределяют фабричный метод, чтобы изменить
// тип результирующего продукта.
класс WindowsDialog расширяет диалоговое окно
метод createButton():Кнопка
вернуть новый WindowsButton()
класс WebDialog расширяет диалоговое окно
метод createButton():Кнопка
вернуть новый HTMLButton()
// Интерфейс продукта объявляет операции, которые все
// конкретные продукты должны быть реализованы.
Кнопка интерфейса есть
метод рендеринга()
метод onClick(f)
// Бетонные изделия обеспечивают различные реализации
// интерфейс продукта.
класс WindowsButton реализует кнопку
метод render(a, b)
// Отобразить кнопку в стиле Windows.
метод onClick(f)
// Привязать собственное событие щелчка ОС.
класс HTMLButton реализует кнопку
метод render(a, b)
// Возвращаем HTML-представление кнопки.
метод onClick(f)
// Привязать событие щелчка веб-браузера.
приложение класса
диалоговое окно поля: Диалоговое окно
// Приложение выбирает тип создателя в зависимости от
// текущая конфигурация или настройки среды.
метод инициализации ()
config = прочитатьApplicationConfigFile()
если (config.OS == "Windows") то
диалог = новый WindowsDialog()
иначе если (config.OS == "Web"), то
диалог = новый веб-диалог()
еще
throw new Exception("Ошибка! Неизвестная операционная система.")
// Клиентский код работает с экземпляром конкретного
// создатель, хотя и через его базовый интерфейс. Пока
// клиент продолжает работать с создателем через базу
// интерфейс, вы можете передать ему любой подкласс создателя.
метод main() есть
это.инициализировать ()
диалог.рендер()
Применимость Используйте фабричный метод, если вы заранее не знаете точных типов и зависимостей объектов, с которыми должен работать ваш код.
Фабричный метод отделяет код создания продукта от кода, который фактически использует продукт. Поэтому проще расширять код построения продукта независимо от остального кода.
Например, чтобы добавить в приложение новый тип продукта, вам нужно всего лишь создать новый подкласс создателя и переопределить в нем фабричный метод.
Используйте фабричный метод, если вы хотите предоставить пользователям вашей библиотеки или платформы способ расширения ее внутренних компонентов.
Наследование, вероятно, является самым простым способом расширить стандартное поведение библиотеки или фреймворка. Но как фреймворк распознает, что ваш подкласс следует использовать вместо стандартного компонента?
Решение состоит в том, чтобы сократить код, создающий компоненты в рамках платформы, до одного фабричного метода и позволить любому переопределить этот метод в дополнение к расширению самого компонента.
Посмотрим, как это будет работать. Представьте, что вы пишете приложение, используя инфраструктуру пользовательского интерфейса с открытым исходным кодом. В вашем приложении должны быть круглые кнопки, но фреймворк предоставляет только квадратные. Вы расширяете стандартный класс Button великолепным подклассом RoundButton . Но теперь вам нужно указать основному классу UIFramework использовать новый подкласс кнопок вместо стандартного.
Для этого вы создаете подкласс UIWithRoundButtons из базового класса фреймворка и переопределяете его метод createButton . Хотя этот метод возвращает объекта Button в базовом классе, вы заставляете свой подкласс возвращать объекта RoundButton . Теперь используйте класс UIWithRoundButtons вместо UIFramework . И это все!
Используйте фабричный метод, если вы хотите сэкономить системные ресурсы за счет повторного использования существующих объектов, а не каждый раз перестраивать их.
Такая потребность часто возникает при работе с большими ресурсоемкими объектами, такими как соединения с базами данных, файловые системы и сетевые ресурсы.
Давайте подумаем, что нужно сделать, чтобы повторно использовать существующий объект:
- Во-первых, вам нужно создать хранилище для отслеживания всех созданных объектов.
- Когда кто-то запрашивает объект, программа должна искать свободный объект внутри этого пула.
- … и затем вернуть его коду клиента.
- Если свободных объектов нет, программа должна создать новый (и добавить в пул).
Много кода! И все это нужно собрать в одном месте, чтобы не засорять программу дублирующимся кодом.
Вероятно, самое очевидное и удобное место, где можно разместить этот код, — это конструктор класса, объекты которого мы пытаемся повторно использовать. Однако конструктор всегда должен возвращать новых объектов по определению. Он не может возвращать существующие экземпляры.
Поэтому вам нужен обычный метод, способный создавать новые объекты, а также повторно использовать существующие. Это очень похоже на фабричный метод.
Как реализоватьСделайте так, чтобы все продукты имели один и тот же интерфейс. Этот интерфейс должен объявлять методы, которые имеют смысл в каждом продукте.
Добавьте пустой фабричный метод в класс-создатель. Тип возвращаемого значения метода должен соответствовать общему интерфейсу продукта.
В коде создателя найти все ссылки на конструкторы продукта. Один за другим замените их вызовами фабричного метода, при этом извлекая код создания продукта в фабричный метод.
Возможно, вам потребуется добавить временный параметр в фабричный метод для управления типом возвращаемого продукта.
В этот момент код фабричного метода может выглядеть довольно уродливо. Он может иметь большой оператор
switch, который выбирает класс продукта для создания экземпляра.
Но не волнуйтесь, мы скоро это исправим.Теперь создайте набор подклассов-создателей для каждого типа продукта, указанного в фабричном методе. Переопределите фабричный метод в подклассах и извлеките соответствующие биты кода построения из базового метода.
Если типов товаров слишком много и для всех них создавать подклассы не имеет смысла, можно переиспользовать управляющий параметр из базового класса в подклассах.
Например, представьте, что у вас есть следующая иерархия классов: базовый класс
Mailс парой подклассов:AirMailиGroundMail; классыТранспорт:Самолет,ГрузовикиПоезд. В то время как 9Класс 0134 AirMail использует только объектыPlane,GroundMailможет работать с объектамиTruckиTrain. Вы можете создать новый подкласс (скажем,TrainMail) для обработки обоих случаев, но есть и другой вариант.
Код клиента может передать аргумент фабричному методу класса GroundMail, чтобы контролировать, какой продукт он хочет получить.Если после всех извлечений базовый фабричный метод стал пустым, вы можете сделать его абстрактным. Если что-то осталось, вы можете сделать это поведением метода по умолчанию.
- Вы избегаете тесной связи между творцом и бетонными изделиями.
- Принцип единой ответственности . Вы можете переместить код создания продукта в одно место в программе, что упростит поддержку кода.
- Открытый/Закрытый принцип . Вы можете вводить в программу новые типы продуктов, не ломая существующий клиентский код.
- Код может усложниться, поскольку для реализации шаблона необходимо ввести множество новых подклассов.
В лучшем случае вы вводите шаблон в существующую иерархию классов-создателей.
Многие проекты начинаются с использования фабричного метода (менее сложного и более настраиваемого с помощью подклассов) и развиваются в направлении абстрактной фабрики, прототипа или конструктора (более гибкого, но более сложного).
Классы абстрактной фабрики часто основаны на наборе фабричных методов, но вы также можете использовать Prototype для составления методов этих классов.
Вы можете использовать фабричный метод вместе с Iterator, чтобы позволить подклассам коллекций возвращать разные типы итераторов, совместимых с коллекциями.
Prototype не основан на наследовании, поэтому у него нет недостатков. С другой стороны, Prototype требует сложной инициализации клонированного объекта. Фабричный метод основан на наследовании, но не требует шага инициализации.


Для его выражения используются такие единицы – кгс/см2.
Вот аналогия: крупная компания по разработке программного обеспечения может иметь отдел обучения программистов. Однако основной функцией компании в целом по-прежнему является написание кода, а не подготовка программистов.
Кнопка okButton = createButton()
// Теперь используйте продукт.
okButton.onClick(closeDialog)
okButton.render()
// Создатели бетона переопределяют фабричный метод, чтобы изменить
// тип результирующего продукта.
класс WindowsDialog расширяет диалоговое окно
метод createButton():Кнопка
вернуть новый WindowsButton()
класс WebDialog расширяет диалоговое окно
метод createButton():Кнопка
вернуть новый HTMLButton()
// Интерфейс продукта объявляет операции, которые все
// конкретные продукты должны быть реализованы.
Кнопка интерфейса есть
метод рендеринга()
метод onClick(f)
// Бетонные изделия обеспечивают различные реализации
// интерфейс продукта.
класс WindowsButton реализует кнопку
метод render(a, b)
// Отобразить кнопку в стиле Windows.
метод onClick(f)
// Привязать собственное событие щелчка ОС.
класс HTMLButton реализует кнопку
метод render(a, b)
// Возвращаем HTML-представление кнопки.
метод onClick(f)
// Привязать событие щелчка веб-браузера.
приложение класса
диалоговое окно поля: Диалоговое окно
// Приложение выбирает тип создателя в зависимости от
// текущая конфигурация или настройки среды.
метод инициализации ()
config = прочитатьApplicationConfigFile()
если (config.OS == "Windows") то
диалог = новый WindowsDialog()
иначе если (config.OS == "Web"), то
диалог = новый веб-диалог()
еще
throw new Exception("Ошибка! Неизвестная операционная система.")
// Клиентский код работает с экземпляром конкретного
// создатель, хотя и через его базовый интерфейс. Пока
// клиент продолжает работать с создателем через базу
// интерфейс, вы можете передать ему любой подкласс создателя.
метод main() есть
это.инициализировать ()
диалог.рендер()
Но не волнуйтесь, мы скоро это исправим.
Код клиента может передать аргумент фабричному методу класса
В лучшем случае вы вводите шаблон в существующую иерархию классов-создателей.