powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Паттерн билдер
22 сообщений из 22, страница 1 из 1
Паттерн билдер
    #39305643
JulT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет. Есть цепочка вызовов методов:
Код: java
1.
methodOne().methodTwo().methodThree() 


1. Как правильно прервать выполнение цепочки, например, на methodTwo(), пока что приходят в голову варианты с исключением или используя некий булеан флаг
2. Как запретить перестановку методов в цепочке вызовов, т.е. чтобы вот так:
Код: java
1.
methodOne().methodThree().methodTwo() 

нельзя было написать
Спасибо
...
Рейтинг: 0 / 0
Паттерн билдер
    #39305650
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JulT,

Зачем исключение? Безопаснее разные типы возвращать.
...
Рейтинг: 0 / 0
Паттерн билдер
    #39305656
JulT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczJulT,

Зачем исключение? Безопаснее разные типы возвращать.
а можно с примерчиком?
и по второму вопросу могли бы что-то подсказать?
...
Рейтинг: 0 / 0
Паттерн билдер
    #39305662
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JulT,
Не понял. Разве паттерн о цепочке вызовов?
- любую цепочку можно написать без цепочки в несколько строк. Поэтому первый вопрос непонятен. Прогер может написать 3 строки, а может в одну. Его дело.
...
Рейтинг: 0 / 0
Паттерн билдер
    #39305666
JulT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123JulT,
Не понял. Разве паттерн о цепочке вызовов?
- любую цепочку можно написать без цепочки в несколько строк. Поэтому первый вопрос непонятен. Прогер может написать 3 строки, а может в одну. Его дело.
как программно задать последовательность вызовов методов? чтобы было так и никак иначе:
methodOne().methodTwo().methodThree()
как программно сделать так, чтобы если написать methodOne().methodTwo() происходил некий алерт, мол нет вызова methodTwo()
или это из области моих фантазий?:)
...
Рейтинг: 0 / 0
Паттерн билдер
    #39305671
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JulTили это из области моих фантазий?:)
да. IMHO
Если вы у объекта возврата функции methodOne() не напишите метод methodTwo(), то после точки НЕ будет подсказки с методом. Не скомпилируется.
По простому - компилятор просто разворачивает вашу одну строку в 3 строки. Это понятно?
...
Рейтинг: 0 / 0
Паттерн билдер
    #39305674
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
class Builder {

public Second methodOne() {
...
}


public static interface Second {
public Third methodTwo();
}


public static interface Third {
public void methodThree();
}

}
...
Рейтинг: 0 / 0
Паттерн билдер
    #39305679
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
no56892,
не знаю про что ТС. Я говорил про ООП (без интерфейсов).
...
Рейтинг: 0 / 0
Паттерн билдер
    #39305683
schi
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JulTкак программно задать последовательность вызовов методов? чтобы было так и никак иначе:
methodOne().methodTwo().methodThree()
как программно сделать так, чтобы если написать methodOne().methodTwo() происходил некий алерт, мол нет вызова methodTwo()
или это из области моих фантазий?:)

Очевидно, поменять архитектуру, так как в ней что-то не то, если функциональность зависит от последовательности вызовов.

Программно - объединить три метода в один и вызывать его извне.
Если же методы настолько ценны, что должны вызываться вне класса, то в классе завести поле для состояния и отмечать, какой метод (какие методы) были вызваны, в методах, перед которыми что-то должно быть вызвано, проверять эти предусловия.
...
Рейтинг: 0 / 0
Паттерн билдер
    #39305691
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
schiОчевидно, поменять архитектуру, так как в ней что-то не то, если функциональность зависит от последовательности вызовов.
+1
именно это меня и поразило.
Какого фига я должен писать так а не иначе цепочку. Цепочку составляет программист САМ).
ЗЫ.
Паттерн в сабже вообще не про цепочки.
...
Рейтинг: 0 / 0
Паттерн билдер
    #39305694
Фотография RocknRolla
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
no56892
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
class Builder {

public Second methodOne() {
...
}


public static interface Second {
public Third methodTwo();
}


public static interface Third {
public void methodThree();
}

}



Плюсую!
...
Рейтинг: 0 / 0
Паттерн билдер
    #39305695
JulT
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123schiОчевидно, поменять архитектуру, так как в ней что-то не то, если функциональность зависит от последовательности вызовов.
+1
именно это меня и поразило.
Какого фига я должен писать так а не иначе цепочку. Цепочку составляет программист САМ).
ЗЫ.
Паттерн в сабже вообще не про цепочки.
всем спасибо, разобралась. про билдер да, это я погорячилась)
...
Рейтинг: 0 / 0
Паттерн билдер
    #39305697
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
package org.javatutorial;

public class MyBuilderFactory {

	public class MyBuilderClass implements MethodOne, MethodTwo , MethodThree {
		
		private SomeResult someResult;

		@Override
		public SomeResult methodThree() {
			return someResult;
			
		}

		@Override
		public MethodThree methodTwo() {
			// some operation
			return this;
			
		}

		@Override
		public MethodTwo methodOne() {
			//some operation 
			return this;
		}} 
	public interface MethodOne{
		MethodTwo methodOne();
	}
	
	public interface MethodTwo{
		MethodThree methodTwo();
	};
	
	public interface MethodThree{
		SomeResult methodThree();
	}
}



можно и в отдельные файлы повыносить.
...
Рейтинг: 0 / 0
Паттерн билдер
    #39306850
chabapok
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
как-то оно многословно выходит. Возможно, автору надо посмотреть на монады, и попытаться реализовать нужный функционал через них.
...
Рейтинг: 0 / 0
Паттерн билдер
    #39306895
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Например цепочка Страна-Город-Улица

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
class Country {
String name;

pulbic Country (String name) {
 this.name = name;
}

 public City city(String name) {
  retrun new City(name);
}
}


class City {
String name;

 public City street(String name) {
  retrun new Street(name);
}

class Street {
String name;

}

new Country("Россия").city("Москва").street("Ленина");
...
Рейтинг: 0 / 0
Паттерн билдер
    #39306899
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чтобы и в обратном порядке

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
class Country {
String countryName;

pulbic Country (String countryName) {
 this.countryName= countryName;
}

 public City city(String cityName) {
  retrun new City(countryName, cityName);
}
}


class City {
String countryName;
String cityName;

pulbic City (String countryName, String cityName) {
 this.countryName= countryName;
 this.cityName= cityName;
}

 public Street street(String streetName) {
  retrun new Street(countryName, cityName, streetName);
}

 public Country country() {
  retrun new Country(countryName);
}


}

class Street {
String countryName;
String cityName;
String steetName;

pulbic Street (String  steetName, String countryName, String cityName) {
 this.countryName= countryName;
 this.cityName= cityName;
 this.steetName= steetName;
}

public City city() {
return new City(countryName, cityName)
}

}

Street street = new Country("Россия").city("Москва").street("Ленина");
City city = street.city();
...
Рейтинг: 0 / 0
Паттерн билдер
    #39306910
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Билдер нужно сделать FSM. И чтобы на каждый сеттинг страны-города-улицы
включались флажки или менялся счетчик и дальше соотв. разруливать
рулы так как автору надо. Запорол бок - получи IllegalState.
...
Рейтинг: 0 / 0
Паттерн билдер
    #39306983
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Паттерн билдер
    #39308176
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonБилдер нужно сделать FSM. И чтобы на каждый сеттинг страны-города-улицы
включались флажки или менялся счетчик и дальше соотв. разруливать
рулы так как автору надо. Запорол бок - получи IllegalState.

какие будут за и против билдер паттерна и конроля с помощью флагжков ?
...
Рейтинг: 0 / 0
Паттерн билдер
    #39308179
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
llemingкакие будут за и против билдер паттерна и конроля с помощью флагжков ?
Смысл контролировать в run-time, если можно в compile-time?
...
Рейтинг: 0 / 0
Паттерн билдер
    #39308182
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
у бидера стремно чтобы протестировать логику надо в любом случае собирать весь объект может быть непросто если много полей
exception если вдруг посередине сборки объекта
и дебажить неудобно надо в уме держать что было ранее.
...
Рейтинг: 0 / 0
Паттерн билдер
    #39308217
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
lleming,
легко уйти в оверхед. И вместо кодирования БЛ по простому, делать БЛ не там где надо.
...
Рейтинг: 0 / 0
22 сообщений из 22, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / Паттерн билдер
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]