23 шаблона проектирования в Java — шаблон Builder

Java задняя часть Шаблоны проектирования продукт

1 Определение

GOF определяет шаблон построения следующим образом: построение сложного объекта отделено от его представления, так что одно и то же построение Процедуры могут создавать различные представления. Это предложение очень абстрактное и сложное для понимания, на самом деле его значение можно понять так: Процесс создания сложных объектов отделен от компонентов, составляющих объект.
Точно так же, как собранный компьютер, независимо от марки аксессуаров, если Одни и те же аксессуары можно установить разными способами. Это сделано для уменьшения связи и улучшения возможности повторного использования. Реализация духа сексуальности.

2 Структура

Когда создаваемый продукт имеет сложную внутреннюю структуру -Например, он состоит из нескольких объектов; а спрос на этот товар в системе Состав внутренней структуры объекта товара в будущем может быть изменен, например, некоторые атрибуты товара теперь группируются по маленькому объекту. , а измененная модель, возможно, должна состоять из N небольших объектов, а внутреннюю структуру продукта нельзя полностью раскрыть покупателю. Пользовательские процедуры, одна для удобства использования, другая для безопасности и других факторов. Если приведенная выше среда проектирования удовлетворена, вы можете рассмотреть возможность использования конструкции шаблон для создания каркаса.

Состав режима строительства:

  1. Абстрактный шаблон конструктора--Эта роль используется для стандартизации построения различных компонентов объекта продукта. Как правило, эта роль не зависит от бизнес-логики приложения.
  2. Конкретные роли строителя--Эту роль выполняют классы, тесно связанные с приложением, которые вызываются директором. Создайте экземпляр продукта. Эта роль обеспечивает завершение группы продуктов на основе реализации методов, предоставляемых ролью абстрактного построителя. обеспечить функциональность готового продукта.
  3. роль наставника-- Вызвать конкретную роль строителя для создания объекта продукта. У наставника нет конкретных знаний о классе продукта (также называемом контекстом). Это конкретный объект-конструктор, который действительно обладает конкретными знаниями о классе продукта.
  4. роль продукта-- Сложные строящиеся объекты. Он содержит классы, которые определяют компоненты, включая сборку этих компонентов в производство. интерфейс продукта.

Сначала клиентская программа создает объект директора, роль строителя, и передает роль строителя объекту директора. настроить. Затем инструктор выполняет шаги, чтобы вызвать метод построителя для создания продукта. Наконец клиентская программа из конструктора или товар от инструктора. С точки зрения рабочего процесса режима строительства, режим строительства «переносит» сборку продукта в роль строителя.

3 примера кода

Вот пример изготовления простого iphone6
класс сущности iphone

public class Iphone6 {
	
	private Cell cell;	//电池
	private Screen screen;	//屏幕
	private Mainboard mainboard;	//主板
	
	public void open() {
		System.out.println("手机开机");
	}
	
	public Cell getCell() {
		return cell;
	}
	public void setCell(Cell cell) {
		this.cell = cell;
	}
	public Screen getScreen() {
		return screen;
	}
	public void setScreen(Screen screen) {
		this.screen = screen;
	}
	public Mainboard getMainboard() {
		return mainboard;
	}
	public void setMainboard(Mainboard mainboard) {
		this.mainboard = mainboard;
	}

}

//电池类
class Cell{
	private String name;
	public Cell(String name) {
		this.name = name;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
}

//电池类
class Screen{
	private String name;
	public Screen(String name) {
		this.name = name;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
}

//主板类
class Mainboard{
	private String name;
	public Mainboard(String name) {
		this.name = name;
	}
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	
}

Интерфейс инструктора

//指导者
public interface Iphone6Director {
	Iphone6 dircectIphone6();
}

интерфейс конструктора

//构造者抽象类
public interface Iphone6Builder {
	//构建自组建
	Cell builderCell();
	Screen builderScreen();
	Mainboard builderMainboard();
}

Класс реализации конструктора — используется для создания различных компонентов сложных объектов.

public class MyIphone6Builder implements Iphone6Builder{

	@Override
	public Cell builderCell() {
		// TODO Auto-generated method stub
		System.out.println("构建屏幕");
		//也可以与工厂模式或单例模式相结合 
		return new Cell("iphone6的屏幕");
	}

	@Override
	public Screen builderScreen() {
		// TODO Auto-generated method stub
		System.out.println("构建电池");
		return new Screen("iphone6的电池");
	}

	@Override
	public Mainboard builderMainboard() {
		// TODO Auto-generated method stub
		System.out.println("构建主板");
		return new Mainboard("iphone6的主板");
	}
	
}

Класс реализации инструктора - отвечает за организацию последовательности построения каждого компонента

public class MyIphone6Director implements Iphone6Director{

	private MyIphone6Builder builder;
	
	public MyIphone6Director(MyIphone6Builder builder) {
		this.builder = builder;
	}
	@Override
	public Iphone6 dircectIphone6() {
		// TODO Auto-generated method stub
		Cell cell = builder.builderCell();
		Mainboard mainboard = builder.builderMainboard();
		Screen screen = builder.builderScreen();
		//装配成iphone6
		Iphone6 iphone6 = new Iphone6();
		iphone6.setCell(cell);
		iphone6.setMainboard(mainboard);
		iphone6.setScreen(screen);
		return iphone6;
	}
}

тестовый класс

public class TestIphone {
	public static void main(String[] args) {
		MyIphone6Director director = new MyIphone6Director(new MyIphone6Builder());
		Iphone6 iphone6 = director.dircectIphone6();
		iphone6.open();
	}
}

В конце концов, группой был собран iphone:
построить экран
Сборка материнской платы
Собери батарею
телефон включен

4 преимущества шаблона конструктора:

  1. Режим сборки избавляет покупателя от необходимости знать слишком много внутренних деталей продукта. Он инкапсулирует композицию и представление сложных объектов. Устанавливается в определенной роли сборки, и наставник координирует роль сборщика для получения конкретных экземпляров продукта.
  2. Режим сборки обеспечивает более детальный контроль над созданием сложных продуктов. Состав продукта вызывается ролью наставника Конкретная роль строителя выполняется шаг за шагом, поэтому она может лучше отражать процесс создания продукта, чем другие режимы создания.

5 расширений:

В режиме строительства, скорее всего, будут использоваться различные классы компонентов, из которых состоит готовое изделие.Для создания этих классов рассмотрите возможность использования фабрик Может быть реализован режим метода или прототипа, а также может быть добавлен одноэлементный режим для управления генерацией экземпляров класса, когда это необходимо. но Придерживаясь основной предпосылки, что введенные шаблоны приносят пользу вашей системе, а не раздутые структуры.
Режим построения может относиться к нескольким различным компонентам при получении сложного продукта. Шаблон и шаблон абстрактной фабрики похожи. Их можно отличить по следующим двум пунктам: Режим создания фокусируется на пошаговой сборке компонентов. сформировать готовый продукт и предоставить готовый продукт внешнему миру, в то время как шаблон абстрактной фабрики фокусируется на получении нескольких объектов продукта, связанных с семейством продуктов; Применение фабричного шаблона ограничено семейством продуктов, а строительного шаблона — нет.

Также см.:
Вы действительно поняли шаблон конструктора шаблонов проектирования Java?