English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
Определение паттерна建造итель:
Разделение constructions сложного объекта от его представления, чтобы аналогичный процесс constructions мог создавать различные представления, такой дизайн模式的 называется паттерном建造итель.
Структура паттерна建造итель:
Роли паттерна建造者:
Builder: Определение абстрактного интерфейса для указания различных компонентов продукта.
ConcreteBuilder: Реализация интерфейса Builder для конструирования и装配ки различных компонентов продукта, определение и ясное представление, которое оно создает, и предоставление интерфейса для извлечения продукта.
3 Director: создает объект, использующий интерфейс Builder.
4 Product: представляет собой сложный объект, который создается. ConcreteBuilder создает внутреннее представление этого продукта и определяет процесс его装配ации, включая классы, определяющие составные части, и интерфейсы, которые собирают эти компоненты в конечный продукт.
Ниже приведен пример из реальной жизни по строительству домов, чтобы объяснить паттерн строитель:
1. Абстрагирование интерфейса строителя, который включает условия создания типа дома, создание после которого возвращает количество комнат и описание этого дома.
/// <summary> /// Абстрактные строители /// </summary> public interface IHouse { /// <summary> /// Условия создания типа дома /// </summary> /// <returns></returns> bool GetBackyard(); /// <summary> /// Количество созданных комнат /// </summary> /// <returns></returns> long NoOfRooms(); /// <summary> /// Описание /// </summary> /// <returns></returns> string Description(); }
2. Наследование интерфейса IHouse, конкретный строитель, здесь создан комната, которая включает гостиную, кухню, ванную комнату, спальню, всего четыре комнаты в этом доме.
public class CRoom { public string RoomName { get; set; } } /// <summary> /// Конкретные строители /// </summary> public class CSFH:IHouse { private bool mblnBackyard; private Hashtable Rooms; public CSFH() { CRoom room = new CRoom() room.RoomName = "Гостиная на первом этаже"; Rooms = new Hashtable(); Rooms.Add("room1", room); room = new CRoom(); room.RoomName = "Кухня на первом этаже"; Rooms.Add("room2", room); room = new CRoom(); room.RoomName = "Ванная комната на первом этаже"; Rooms.Add("room3", room); room = new CRoom(); room.RoomName = "Спальня на первом этаже"; Rooms.Add("room4",room); mblnBackyard = true; } public bool GetBackyard() { return mblnBackyard; } public long NoOfRooms() { return Rooms.Count; } public string Description() { IDictionaryEnumerator myEnumerator = Rooms.GetEnumerator(); string strDescription = "Этот дом включает в себя " + Rooms.Count + " комнат \n"; while (myEnumerator.MoveNext()) { strDescription = strDescription + "\n" + myEnumerator.Key + "\t" + ((CRoom)myEnumerator.Value).RoomName; } return strDescription; } }
3. Наследование интерфейса IHouse, конкретный строитель, здесь создан дом, который включает только спальню, гостиную и кухню, всего три комнаты в этом доме.
/// <summary> /// Другие конкретные строители /// </summary> public class CApt:IHouse { private bool mblnBackyard; private Hashtable Rooms; public CApt() { Rooms = new Hashtable(); CRoom room = new CRoom() room.RoomName = "спальня"; Rooms.Add("room1", room); room = new CRoom(); room.RoomName = "гостиная"; Rooms.Add("room2", room); room = new CRoom(); room.RoomName = "кухня"; Rooms.Add("room3", room); mblnBackyard = false; } public bool GetBackyard() { return mblnBackyard; } public long NoOfRooms(){ return Rooms.Count; } public string Description(){ IDictionaryEnumerator myEnumerator = Rooms.GetEnumerator(); string strDescription = "Эта квартира всего " + Rooms.Count + " комнат \n"; while (myEnumerator.MoveNext()) { strDescription = strDescription + "\n" + myEnumerator.Key + "\t" + ((CRoom)myEnumerator.Value).RoomName; } return strDescription; } }
4. Создание руководителя, который определяет,哪个 строитель будет создавать какой тип комнаты.
/// <summary> /// Руководитель /// </summary> public class CDirector { public IHouse BuildHouse(bool blnBackyard) { if (blnBackyard) { return new CSFH(); } else { return new CApt(); } } }
5. Создание:
static void Main(string[] args) { CDirector objDirector = new CDirector(); // Создание экземпляра руководителя IHouse objHouse; string Input = Console.ReadLine(); // Ввод условий для того, чтобы哪个创建атель создавал комнату objHouse = objDirector.BuildHouse(bool.Parse(Input)); Console.WriteLine(objHouse.Description()); Console.ReadLine(); }
Модель строительного шаблона主要用于 «поэтапное строительство сложного объекта», в котором «поэтапное строительство» — это стабильный алгоритм, а части сложного объекта часто изменяются
Продукт не требует абстрактного класса, особенно в случаях, когда создание объектов имеет сложные алгоритмы и использование этой модели, или когда эта модель применяется к процессу создания продукта, конечный результат может значительно отличаться, и вряд ли можно выделить абстрактный продукт.
Предыдущая модель абстрактного завода решает изменения требований к «серии объектов», модель строительного шаблона решает изменения требований к «частьям объекта».
Использование модели строительного шаблона позволяет независимое изменение внутренней структуры продукта. Использование модели строительного шаблона позволяет клиенту не знать детаили внутреннего состава продукта
Каждый Builder относительно независим, и не связан с другими Builder.
Модель строительного шаблона подходит для объектов, чьи свойства взаимозависимы при создании, модель строительного шаблона может принудительно определить порядок создания. Объекты, которые необходимо создать, имеют сложную внутреннюю структуру.
Это конец статьи. Надеюсь, это поможет вам в изучении. также希望大家多多支持呐喊教程。
Заявление: данное содержимое предоставлено из интернета, авторские права принадлежат соответствующему автору. Содержимое предоставлено пользователями интернета, автоматически загружено, сайт не имеет права собственности, не был подвергнут редактированию, и не несет ответственности за связанные с этим юридические обязательства. Если вы обнаружите содержимое,涉嫌侵犯版权, пожалуйста, отправьте письмо по адресу notice#oldtoolbag.com (во время отправки письма, пожалуйста, замените # на @) для сообщения о нарушении,并提供相关证据. При подтверждении, сайт немедленно удалит涉嫌侵权的内容。