powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Какой паттерн использовать чтоб заменить многочисленные ифы?
9 сообщений из 34, страница 2 из 2
Какой паттерн использовать чтоб заменить многочисленные ифы?
    #38928802
silvan
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
silvan,
Код: java
1.
2.
Somethinger somethinger = typeMap.get(type);
somethinger.doSomething();
...
Рейтинг: 0 / 0
Какой паттерн использовать чтоб заменить многочисленные ифы?
    #38928820
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Арсеньев,

Даже скорее Consumer.

Чтобы написать простенький еще один калькулятор
Код: 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.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
import java.util.*;
import java.util.function.*;
import java.util.regex.*;

public class TestLambda {

 private int i;

 private void add(final String s) {
  i+=Integer.parseInt(s);
 }

 private void sub(final String s) {
  i-=Integer.parseInt(s);
 }

 private void print() {
  System.out.println(i);
 }

 public static class ParamHolder {
  public final TestLambda th;
  public final Matcher m;
  public ParamHolder(final TestLambda th,final Matcher m){
   this.th=th;
   this.m=m;
  }
 }

 public static class FuncHolder {
  public final Pattern pattern;
  public final Consumer<ParamHolder> func;
  public FuncHolder(final Pattern pat,final Consumer<ParamHolder> func){
   this.pattern=pat;
   this.func=func;
  }
 }

 private static final List<FuncHolder> DEEDS_MAP= new ArrayList<FuncHolder>();

 static {
  DEEDS_MAP.add(new FuncHolder(Pattern.compile("\\+\\s+([0-9]+)"), (t) -> t.th.add(t.m.group(1))));
  DEEDS_MAP.add(new FuncHolder(Pattern.compile("добавь\\s+([0-9]+)"), (t) -> t.th.add(t.m.group(1))));
  DEEDS_MAP.add(new FuncHolder(Pattern.compile("\\-\\s+([0-9]+)"), (t) -> t.th.sub(t.m.group(1))));
  DEEDS_MAP.add(new FuncHolder(Pattern.compile("вычти\\s+([0-9]+)"), (t) -> t.th.sub(t.m.group(1))));
  DEEDS_MAP.add(new FuncHolder(Pattern.compile("\\="), (t) -> t.th.print()));
 }

 public void doSomething(String o) {
  final int l = DEEDS_MAP.size();
  for (int i =0;i<l;i++) {
   final FuncHolder h = DEEDS_MAP.get(i);
   final Matcher m = h.pattern.matcher(o);
   if (m.matches()) h.func.accept(new ParamHolder(this,m));
  }
 }

 public static void main(String[] args) {
  TestLambda tl = new TestLambda();
  for (String s : args)
   tl.doSomething(s);
 }
}

...
Рейтинг: 0 / 0
Какой паттерн использовать чтоб заменить многочисленные ифы?
    #38929004
For All
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
redwhite90На собеседовании спросили следующий вопрос:

Есть метод:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public void foo(SomeObject o){
    if(o.matches(constant1)){
          doSomething1(); 
    }else if(o.matches(constant2)){
          doSomething2(); 
    }
    }else if(o.matches(constant3)){
          doSomething3(); 
    }
    ....
}



Вопрос звучал, как отрефакторить такой метод.Незачем его рефакторить.
P.S. Вся последующая дискуссия это доказывает
...
Рейтинг: 0 / 0
Какой паттерн использовать чтоб заменить многочисленные ифы?
    #38929057
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
For All,

В общем то да, но если часто надо менять набор констант или, например, встала задача подгружать его из базы, то логично сделать связанные массивы констант и методов.

Быстрее работать не будет, но поведение управляться будет легче.
...
Рейтинг: 0 / 0
Какой паттерн использовать чтоб заменить многочисленные ифы?
    #38929059
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
For All Вопрос звучал, как отрефакторить такой метод.Незачем его рефакторить.
P.S. Вся последующая дискуссия это доказывает[/quot]
Правильно! Порвать шаблон интервьюеру и работа в кармане.
...
Рейтинг: 0 / 0
Какой паттерн использовать чтоб заменить многочисленные ифы?
    #38929063
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

Если только именно это и не хотели услышать.
...
Рейтинг: 0 / 0
Какой паттерн использовать чтоб заменить многочисленные ифы?
    #38929068
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интервьюер как отрефакторить такой метод?
Я тут с мужиками на sql.ru посоветовался, все в один голос твердят, что главная заповедь программиста -
НЕ ТРОЖЬ ЧТО И ТАК РАБОТАЕТ!
...
Рейтинг: 0 / 0
Какой паттерн использовать чтоб заменить многочисленные ифы?
    #38929154
rema174
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
настоящий программер, читай - ленивый программер, оставит как есть )
...
Рейтинг: 0 / 0
Какой паттерн использовать чтоб заменить многочисленные ифы?
    #38929163
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я рефакторю обычно то что covered by unit-tests. Или после своего рефакторинга
пересылаю ревизию коллегам и прошу тщательно просмотреть.

За рефакторинг "просто так" или "по приколу" нужно бить по рукам. Дефекты
которые возникают после таких внезапных налётов "теоретиков" и любителей
Фаулера, трудноуловимы и будучи на виду остаются "невидимками".

Такой-себе эффект замыливания глаза. Вы никогда и нигде не подумаете
что баг возник вследствие ваших улучшений. Будете упорно искать в других
местах.

Селяви.
...
Рейтинг: 0 / 0
9 сообщений из 34, страница 2 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Какой паттерн использовать чтоб заменить многочисленные ифы?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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