SlideShare a Scribd company logo
Шаблоны проектирования
Шаблоны проектирования абстракция объектов, классов и их взаимодействия удачные типовые решения определенных задач в определенном контексте элементы архитектуры
 
Виды шаблонов порождающие структурные поведения ………… .
Factory  (фабрика) public static XParser Create(string a_ParserName) { if (a_ParserName == "XUnitelParser") { return new XUnitelParser(); } if (a_ParserName == "XDxParser") { return new XDxParser(); } if (a_ParserName == "XUnitelFlashParser") { return new XUnitelFlashParser(); } throw new Exception("Неизвестный парсер " + a_ParserName); }
Factory  (фабрика) public static XDocumentConflictFindingStrategy Create(XDocument a_Document) { if (a_Document.Type.Category == DocumentCategory.Billing) { return new XBillingConflictFindingStrategy(a_Document); } if (a_Document.Order != null)  { return new XOrderConflictFindingStrategy(a_Document); } return new XAccountingConflictFindingStrategy(a_Document);  }
Factory  (фабрика) класс-клиент не знает, какие типы объектов ему нужно создавать класс-клиент спроектирован с учетом делегирования обязанностей подклассам инкапсуляция логики создания нового объекта в одном участке кода
Abstract Factory
Abstract Factory   ( абстрактная фабрика ) List<IExtendedFilterTemplate> m_Templates = new List<IExtendedFilterTemplate>(); m_Templates.Add(new XExtendedFilterTemplate(&quot; Производитель &quot;, new IRelation[] { new XEqualsRelation(&quot;Producer&quot;, &quot;равен&quot;), new XDoesNotEqualRelation(&quot;Producer&quot;, &quot;не равен&quot;), new XBeginsRelation(&quot;Producer&quot;), new XContainRelation(&quot;Producer&quot;) }, new XComboBoxControlBuilder(new XTableFieldDataSource(new DB.vProducers(), DB.vProducers.NameColumn)) )); m_Templates.Add(new XExtendedFilterTemplate(&quot;PartNumber&quot;, new IRelation[] { new XEqualsRelation(&quot;PartNumber&quot;, &quot;равен&quot;), new XDoesNotEqualRelation(&quot;PartNumber&quot;, &quot;не равен&quot;), new XBeginsRelation(&quot;PartNumber&quot;) }, new XFilterControlBuilder<XFilterTextBoxControl>() )); m_Templates.Add(new XExtendedFilterTemplate(&quot; Код товара &quot;, new IRelation[] { new XEqualsRelation(&quot;ItemNum&quot;, &quot;равен&quot;), new XDoesNotEqualRelation(&quot;ItemNum&quot;, &quot;не равен&quot;), new XIsNullRelation(&quot;ItemNum&quot;), new XIsNotNullRelation(&quot;ItemNum&quot;) }, new XNumberControlBuilder(false) ));
Abstract Factory   ( абстрактная фабрика ) Интерфейсы: IDbCommand, IDbTransaction, IDbConnection Конкретные классы: —  ADO.NET: SqlCommand, SqlTransaction, SqlConnection —  ORACLE: OracleCommand, OracleTransaction, OracleConnection —  MySQL: MysqlCommand, MysqlTransaction, MysqlConnection
Abstract Factory   ( абстрактная фабрика ) interface IDataBaseImplementation { DbDataAdapter GetAdapterForSelect(IDbCommand a_SelectCommand); DbDataAdapter GetAdapterForUpdate(DataTable a_Table, XTransaction  a_Transaction); DbDataAdapter GetAdapterForBatchUpdate(DataTable a_Table); IDbCommand GetDbCommand(string a_CommandText); IDbCommand GetDbCommand(string a_CommandText, XTransaction  a_Transaction); IDbCommand GetDbCommand(string a_CommandText,  XPermanentConnection a_Connection); IDbConnection GetConnection(string a_ConnectionString); IDataParameter GetParameter(string a_Name, object a_Value); IDbTransaction GetTransaction(); }
Abstract Factory   ( абстрактная фабрика ) система не зависит от способа создания, компоновки и представления объектов объекты должны использоваться семействами система конфигурируется семейством объектов сокрытие реализации объектов
Singleton  (одиночка) public class XSecurityManager { static XSecurityManager m_Instance = null; public static XSecurityManager Instance { get { if (m_Instance == null) { m_Instance = new XSecurityManager(); } return m_Instance; } } XSecurityManager() { } public virtual bool IsActionAllowed( XAction  a_Action) { return ... } }
Singleton  (одиночка) public class XSecurityManager { … public static XSecurityManager Instance { get { if (m_Instance == null) { m_Instance = new XSecurityManagerForTesting (); } return m_Instance; } } … } public class XSecurityManagerForTesting : XSecurityManager { public override bool IsActionAllowed(object a_Action) { return true; } }
Singleton  (одиночка) class XCompany { … m_Groups = new XObjectCollection <XCompany, XCompanyGroup, DB.xCompaniesToCategories> (this, XCompanyGroupRepostitory.Instance, &quot;id_Company&quot;,   &quot;id_Category&quot;);
Singleton  (одиночка) должен быть только один экземпляр класса класс должен расширяться наследованием
Lazy Load  ( загрузка по требованию ) IList<XOrderService> m_Services = null; public IList<XOrderService> Services { get { if (m_Services == null) { m_Services = GetServices(); } return m_Services; } }
 
 

More Related Content

PPTX
Mikhail Valkov_Antipatterns
PPTX
ASP.NET MVC - как построить по-настоящему гибкое веб-приложение
PPTX
Основы Java. 5. Databases
PPTX
В помощь разработчику: мини-анализатор кода
PPT
Шаблоны разработки ПО. Часть 3. Шаблоны GoF
PPTX
Григорий Демченко, Универсальный адаптер
PDF
Использование json/xml в БД PostgreSQL и Oracle для хранения произвольных ат...
PDF
Объектно-ориентированное программирование. Лекция 7 и 8.
Mikhail Valkov_Antipatterns
ASP.NET MVC - как построить по-настоящему гибкое веб-приложение
Основы Java. 5. Databases
В помощь разработчику: мини-анализатор кода
Шаблоны разработки ПО. Часть 3. Шаблоны GoF
Григорий Демченко, Универсальный адаптер
Использование json/xml в БД PostgreSQL и Oracle для хранения произвольных ат...
Объектно-ориентированное программирование. Лекция 7 и 8.

What's hot (17)

PDF
Java осень 2014 занятие 7
PPTX
Статический анализ кода
PPTX
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 2
PDF
Объектно-ориентированное программирование. Лекции 9 и 10
PDF
Объектное и прототипное программирование в Javascript
PDF
Влад Ковташ — Yap Database
PDF
Василий Захарченко: "Взгляд на queryDsl-sql фреймворк как альтернатива Hiber...
PPT
Декораторы в Python и их практическое использование
PPTX
Java осень 2012 лекция 7
PDF
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4
PDF
Java осень 2014 занятие 5
PDF
[JAM 1.1] Clean Code (Paul Malikov)
PPT
Производительность в Django
PDF
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
PDF
Оптимизация производительности Python
PDF
Python и его тормоза
PDF
Лекция #5. Введение в язык программирования Python 3
Java осень 2014 занятие 7
Статический анализ кода
Спецкурс "Современные практики разработки ПО", 2013-2014 уч. год, занятие 2
Объектно-ориентированное программирование. Лекции 9 и 10
Объектное и прототипное программирование в Javascript
Влад Ковташ — Yap Database
Василий Захарченко: "Взгляд на queryDsl-sql фреймворк как альтернатива Hiber...
Декораторы в Python и их практическое использование
Java осень 2012 лекция 7
Объектно-Ориентированное Программирование на C++, Лекции 3 и 4
Java осень 2014 занятие 5
[JAM 1.1] Clean Code (Paul Malikov)
Производительность в Django
Объектно-Ориентированное Программирование на C++, Лекции 1 и 2
Оптимизация производительности Python
Python и его тормоза
Лекция #5. Введение в язык программирования Python 3
Ad

Viewers also liked (20)

PPT
Prostředek na mytí nádobí cz tianDe
PPSX
Project management certification program 2014
PPTX
Find the right path: improving career prospects for non-graduates
DOCX
Pmi pmp-resume template-14
PDF
Feedbackstr General Presentation & Portfolio
PPTX
IPv6 Technologies Cloud Environment
PPTX
Technologies and practices for maintaining and publishing earth science vocab...
DOCX
Vishvas resume template-2
DOCX
Cmmaao pmi-resume template-18
DOCX
Mission vishvas-resume template-4
PDF
Cmmaao project-quality-metrics-pmi-pmp
PPTX
니프니! 카카오톡
PDF
CII Policy Watch Legal Regulatory Architecture
DOC
PDF
A bíblia das crianças - José encontra os irmãos (estória e atividades)
PPTX
Локальные инициативы по охране общественного порядка в России: от народных др...
PPTX
Identifying and Handling Children with Disabilities
PPTX
Aprendizaje Autónomo
PDF
Cmmaao roles-and-responsibilities-pmp-pmi
PDF
Визуальная коммуникация и комиксы
Prostředek na mytí nádobí cz tianDe
Project management certification program 2014
Find the right path: improving career prospects for non-graduates
Pmi pmp-resume template-14
Feedbackstr General Presentation & Portfolio
IPv6 Technologies Cloud Environment
Technologies and practices for maintaining and publishing earth science vocab...
Vishvas resume template-2
Cmmaao pmi-resume template-18
Mission vishvas-resume template-4
Cmmaao project-quality-metrics-pmi-pmp
니프니! 카카오톡
CII Policy Watch Legal Regulatory Architecture
A bíblia das crianças - José encontra os irmãos (estória e atividades)
Локальные инициативы по охране общественного порядка в России: от народных др...
Identifying and Handling Children with Disabilities
Aprendizaje Autónomo
Cmmaao roles-and-responsibilities-pmp-pmi
Визуальная коммуникация и комиксы
Ad

Similar to Шаблоны проектирования 1 (20)

PDF
ук 03.003.01 2011
PDF
Шаблоны проектирования в Magento
PPT
Архитектура корпоративных систем
PDF
Проектирование программных систем. Занятие 9
PPTX
Фофанов Илья - Лучшие практики проектирования и реализации API на C#
PDF
C# Desktop. Занятие 12.
PPTX
архитектура .Net
PDF
Паттерны быстрой разработки WPF MVVM бизнес-приложений
PPT
Шаблоны проектирования баз данных — Введение
PPTX
Pustovit presentation
PDF
Шаблоны проектирования GoF
PPTX
Record. Интерфейс
PDF
Gang of four review.Structural patterns
PDF
Общие темы. Тема 02.
PPTX
PostSharp - Threading Model Library
PDF
PostSharp - Threading Model
PPTX
06 Архитектура информационных систем. Паттерны и фреймворки
PDF
High Load 2009 Imdg Presentation
PDF
Архитектура в Agile: слабая связность
PPTX
разработка бизнес приложений (9)
ук 03.003.01 2011
Шаблоны проектирования в Magento
Архитектура корпоративных систем
Проектирование программных систем. Занятие 9
Фофанов Илья - Лучшие практики проектирования и реализации API на C#
C# Desktop. Занятие 12.
архитектура .Net
Паттерны быстрой разработки WPF MVVM бизнес-приложений
Шаблоны проектирования баз данных — Введение
Pustovit presentation
Шаблоны проектирования GoF
Record. Интерфейс
Gang of four review.Structural patterns
Общие темы. Тема 02.
PostSharp - Threading Model Library
PostSharp - Threading Model
06 Архитектура информационных систем. Паттерны и фреймворки
High Load 2009 Imdg Presentation
Архитектура в Agile: слабая связность
разработка бизнес приложений (9)

More from Constantin Kichinsky (20)

PPTX
Brain to brain communications
PPTX
Прототипирование приложений в Expression Blend + Sketchflow
PPTX
JavaScript OOP
PPT
Пользовательский интерфейс
PPT
Шаблоны проектирования 2
PPT
Обработка ошибок
PPT
Создание новых объектов
PPT
Декомпозиция
PDF
Design Lecture
PPT
jQuery: быстрая разработка веб-интерфейсов на JavaScript
PDF
Оптимизация SQL
PPT
Django – фреймворк, который работает
PPT
Ruby On Rails: Web-разработка по-другому!
PDF
Silverlight 2
PPT
Управление проектами
PDF
Silverlight 2
PPT
Код как низкоуровневая документация
PDF
PDF
Ajax и будущее Java Script
PDF
RIA & Silverlight
Brain to brain communications
Прототипирование приложений в Expression Blend + Sketchflow
JavaScript OOP
Пользовательский интерфейс
Шаблоны проектирования 2
Обработка ошибок
Создание новых объектов
Декомпозиция
Design Lecture
jQuery: быстрая разработка веб-интерфейсов на JavaScript
Оптимизация SQL
Django – фреймворк, который работает
Ruby On Rails: Web-разработка по-другому!
Silverlight 2
Управление проектами
Silverlight 2
Код как низкоуровневая документация
Ajax и будущее Java Script
RIA & Silverlight

Шаблоны проектирования 1

  • 2. Шаблоны проектирования абстракция объектов, классов и их взаимодействия удачные типовые решения определенных задач в определенном контексте элементы архитектуры
  • 3.  
  • 4. Виды шаблонов порождающие структурные поведения ………… .
  • 5. Factory (фабрика) public static XParser Create(string a_ParserName) { if (a_ParserName == &quot;XUnitelParser&quot;) { return new XUnitelParser(); } if (a_ParserName == &quot;XDxParser&quot;) { return new XDxParser(); } if (a_ParserName == &quot;XUnitelFlashParser&quot;) { return new XUnitelFlashParser(); } throw new Exception(&quot;Неизвестный парсер &quot; + a_ParserName); }
  • 6. Factory (фабрика) public static XDocumentConflictFindingStrategy Create(XDocument a_Document) { if (a_Document.Type.Category == DocumentCategory.Billing) { return new XBillingConflictFindingStrategy(a_Document); } if (a_Document.Order != null) { return new XOrderConflictFindingStrategy(a_Document); } return new XAccountingConflictFindingStrategy(a_Document); }
  • 7. Factory (фабрика) класс-клиент не знает, какие типы объектов ему нужно создавать класс-клиент спроектирован с учетом делегирования обязанностей подклассам инкапсуляция логики создания нового объекта в одном участке кода
  • 9. Abstract Factory ( абстрактная фабрика ) List<IExtendedFilterTemplate> m_Templates = new List<IExtendedFilterTemplate>(); m_Templates.Add(new XExtendedFilterTemplate(&quot; Производитель &quot;, new IRelation[] { new XEqualsRelation(&quot;Producer&quot;, &quot;равен&quot;), new XDoesNotEqualRelation(&quot;Producer&quot;, &quot;не равен&quot;), new XBeginsRelation(&quot;Producer&quot;), new XContainRelation(&quot;Producer&quot;) }, new XComboBoxControlBuilder(new XTableFieldDataSource(new DB.vProducers(), DB.vProducers.NameColumn)) )); m_Templates.Add(new XExtendedFilterTemplate(&quot;PartNumber&quot;, new IRelation[] { new XEqualsRelation(&quot;PartNumber&quot;, &quot;равен&quot;), new XDoesNotEqualRelation(&quot;PartNumber&quot;, &quot;не равен&quot;), new XBeginsRelation(&quot;PartNumber&quot;) }, new XFilterControlBuilder<XFilterTextBoxControl>() )); m_Templates.Add(new XExtendedFilterTemplate(&quot; Код товара &quot;, new IRelation[] { new XEqualsRelation(&quot;ItemNum&quot;, &quot;равен&quot;), new XDoesNotEqualRelation(&quot;ItemNum&quot;, &quot;не равен&quot;), new XIsNullRelation(&quot;ItemNum&quot;), new XIsNotNullRelation(&quot;ItemNum&quot;) }, new XNumberControlBuilder(false) ));
  • 10. Abstract Factory ( абстрактная фабрика ) Интерфейсы: IDbCommand, IDbTransaction, IDbConnection Конкретные классы: — ADO.NET: SqlCommand, SqlTransaction, SqlConnection — ORACLE: OracleCommand, OracleTransaction, OracleConnection — MySQL: MysqlCommand, MysqlTransaction, MysqlConnection
  • 11. Abstract Factory ( абстрактная фабрика ) interface IDataBaseImplementation { DbDataAdapter GetAdapterForSelect(IDbCommand a_SelectCommand); DbDataAdapter GetAdapterForUpdate(DataTable a_Table, XTransaction a_Transaction); DbDataAdapter GetAdapterForBatchUpdate(DataTable a_Table); IDbCommand GetDbCommand(string a_CommandText); IDbCommand GetDbCommand(string a_CommandText, XTransaction a_Transaction); IDbCommand GetDbCommand(string a_CommandText, XPermanentConnection a_Connection); IDbConnection GetConnection(string a_ConnectionString); IDataParameter GetParameter(string a_Name, object a_Value); IDbTransaction GetTransaction(); }
  • 12. Abstract Factory ( абстрактная фабрика ) система не зависит от способа создания, компоновки и представления объектов объекты должны использоваться семействами система конфигурируется семейством объектов сокрытие реализации объектов
  • 13. Singleton (одиночка) public class XSecurityManager { static XSecurityManager m_Instance = null; public static XSecurityManager Instance { get { if (m_Instance == null) { m_Instance = new XSecurityManager(); } return m_Instance; } } XSecurityManager() { } public virtual bool IsActionAllowed( XAction a_Action) { return ... } }
  • 14. Singleton (одиночка) public class XSecurityManager { … public static XSecurityManager Instance { get { if (m_Instance == null) { m_Instance = new XSecurityManagerForTesting (); } return m_Instance; } } … } public class XSecurityManagerForTesting : XSecurityManager { public override bool IsActionAllowed(object a_Action) { return true; } }
  • 15. Singleton (одиночка) class XCompany { … m_Groups = new XObjectCollection <XCompany, XCompanyGroup, DB.xCompaniesToCategories> (this, XCompanyGroupRepostitory.Instance, &quot;id_Company&quot;, &quot;id_Category&quot;);
  • 16. Singleton (одиночка) должен быть только один экземпляр класса класс должен расширяться наследованием
  • 17. Lazy Load ( загрузка по требованию ) IList<XOrderService> m_Services = null; public IList<XOrderService> Services { get { if (m_Services == null) { m_Services = GetServices(); } return m_Services; } }
  • 18.  
  • 19.