powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Friday pattern
25 сообщений из 79, страница 3 из 4
Friday pattern
    #38569206
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1один вопрос когда и как правильно выбирать между
abstract factory и Prototype.
Чем Mock отличается от Prototype?
...
Рейтинг: 0 / 0
Friday pattern
    #38569225
Alex Kuznetsov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1Usman, хочется видеть пример из жизни , практический и наглядный
Ну вот например:
Код: 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.
  ...
public class ChildRecord extends BaseRecord implements Clonable{

     protected object parentID = null;
     private object ownID = null;
     protected string description = null;

     public ChildRecord(objet parID, string aDescr){
        parentID = parID;
        ownID = getMyNewOwnId();
        description = aDescr;
     }
     
     public void setDescription(string descr){
         this.description = descr;
     }

    @Override
    public ChildRecord clone() throws CloneNotSupportedException {
        ChildRecord copy = new ChildRecord();
        copy.parentID = this.parentID;
        copy.ownID = getMyNewOwnId(); 
 
        return copy;
    }

}

   ну и где-то далее в модели
    ...
    private ChildRecord currentRecord;
    ...
    private ChildRecord createParentedRecord(){
         return currentRecord.clone();
    }

   и ещё в этой же модели...
   public ChildRecord addNewRecord(string aDescr){
       ChildRecord newRec = createParentedRecord();
       
       newRec.setDescription(aDescr);
       records.add(newRecord);
       currentRecord = newRec;
       
       return newRec;
   }

Может применяться в моделях реализующих отношение Master/Detail
...
Рейтинг: 0 / 0
Friday pattern
    #38599111
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Adapter Design Pattern

структурный шаблон проектирования, предназначенный для организации использования функций объекта, недоступного для модификации, через специально созданный интерфейс.

Система поддерживает требуемые данные и поведение, но имеет неподходящий интерфейс.

Адаптер предусматривает создание класса-оболочки с требуемым интерфейсом.


Код: java
1.
2.
3.
4.
//MediaPlayer.java 
public interface MediaPlayer { 
 public void play(String audioType, String fileName); 
} 


Код: java
1.
2.
3.
4.
5.
//AdvancedMediaPlayer.java 
public interface AdvancedMediaPlayer { 
 public void playVlc(String fileName); 
 public void playMp4(String fileName); 
} 




Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
//VlcPlayer.java 
public class VlcPlayer implements AdvancedMediaPlayer{ 
 @Override 
 public void playVlc(String fileName) { 
 System.out.println("Playing vlc file. Name: "+ fileName); 
 } 
 
 @Override 
 public void playMp4(String fileName) { 
 //do nothing 
 } 
}



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
//Mp4Player.java 
public class Mp4Player implements AdvancedMediaPlayer{ 
 
 @Override 
 public void playVlc(String fileName) { 
 //do nothing 
 } 
 
 @Override 
 public void playMp4(String fileName) { 
 System.out.println("Playing mp4 file. Name: "+ fileName); 
 } 
} 



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
//MediaAdapter.java 
public class MediaAdapter implements MediaPlayer { 
 
 AdvancedMediaPlayer advancedMusicPlayer; 
 
 public MediaAdapter(String audioType){ 
 if(audioType.equalsIgnoreCase("vlc") ){ 
 advancedMusicPlayer = new VlcPlayer(); 
 } else if (audioType.equalsIgnoreCase("mp4")){ 
 advancedMusicPlayer = new Mp4Player(); 
 } 
 } 
 
 @Override 
 public void play(String audioType, String fileName) { 
 if(audioType.equalsIgnoreCase("vlc")){ 
 advancedMusicPlayer.playVlc(fileName); 
 }else if(audioType.equalsIgnoreCase("mp4")){ 
 advancedMusicPlayer.playMp4(fileName); 
 } 
 } 
} 



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
//AudioPlayer.java 
public class AudioPlayer implements MediaPlayer { 
 MediaAdapter mediaAdapter; 
 
 @Override 
 public void play(String audioType, String fileName) { 
 
 //inbuilt support to play mp3 music files 
 if(audioType.equalsIgnoreCase("mp3")){ 
 System.out.println("Playing mp3 file. Name: "+ fileName); 
 } 
 //mediaAdapter is providing support to play other file 
formats 
 else if(audioType.equalsIgnoreCase("vlc") 
 || audioType.equalsIgnoreCase("mp4")){ 
 mediaAdapter = new MediaAdapter(audioType); 
 mediaAdapter.play(audioType, fileName); 
 } 
 else{ 
 System.out.println("Invalid media. "+ 
 audioType + " format not supported"); 
 } 
 } 




Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
//AdapterPatternDemo.java 
public class AdapterPatternDemo { 
 public static void main(String[] args) { 
 AudioPlayer audioPlayer = new AudioPlayer(); 
 
 audioPlayer.play("mp3", "beyond the horizon.mp3"); 
 audioPlayer.play("mp4", "alone.mp4"); 
 audioPlayer.play("vlc", "far far away.vlc"); 
 audioPlayer.play("avi", "mind me.avi"); 
 } 
} 




Код: java
1.
2.
3.
4.
5.
//Verify the output. 
Playing mp3 file. Name: beyond the horizon.mp3 
Playing mp4 file. Name: alone.mp4 
Playing vlc file. Name: far far away.vlc 
Invalid media. avi format not supported 


...
Рейтинг: 0 / 0
Friday pattern
    #38599117
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Идя для адаптера , в java ?!

можем ли мы считать адаптер в первом приближении Миксином(mixin) в java ? со всеми оговорками?
...
Рейтинг: 0 / 0
Friday pattern
    #38611886
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1Чтобы не забыть , более корректно через Demand Holder
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public class Singleton {  
   private Singleton() {}
 
   private static class SingletonHolder {  
      public static final Singleton instance = new Singleton();  
   }  
 
   public static Singleton getInstance()  {  
      return SingletonHolder.instance;  
   }  
}



Основной вопрос по этому паттерну - наверное это его поведение в многопоточной среде .
Как, почему,зачем и где его можно встретить?

возник такой вот вопрос :
а почему бы не делать

такую инициализацию и будет ли она потокобезопасной?

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
public class Singleton {
    private static final Singleton instance ;

    private Singleton() {}


    static {
        instance = new Singleton();  
    }
 
  public static Singleton getInstance()  {  
      return instance;  
   } 
}



блок static и инициализация в нем instance - дает нам профит?!
Код: java
1.
2.
3.
 static {
        instance = new Singleton();  
    }
...
Рейтинг: 0 / 0
Friday pattern
    #38611908
DEVcoach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Atum1 ,
Оба варианта безопасны. Но:
1) В случае Холдера, синглтон будет создан только тогда, когда вы реально к нему обратитесь, так как класс SingletonHolder будет загружен только по факту вызова getInstance().
2) А во втором случае синглтон будет создан раньше, при загрузке класса Singleton, то есть когда он, возможно, еще не нужен.
...
Рейтинг: 0 / 0
Friday pattern
    #38612061
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DEVcoach Atum1 ,
Оба варианта безопасны. Но:
1) В случае Холдера, синглтон будет создан только тогда, когда вы реально к нему обратитесь, так как класс SingletonHolder будет загружен только по факту вызова getInstance().
2) А во втором случае синглтон будет создан раньше, при загрузке класса Singleton, то есть когда он, возможно, еще не нужен.

а если без static

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
public class Singleton {
    private static final Singleton instance ;

    private Singleton() {}


   {
        instance = new Singleton();  
   }
 
  public static Singleton getInstance()  {  
      return instance;  
   } 
}
...
Рейтинг: 0 / 0
Friday pattern
    #38612066
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: java
1.
  private static Singleton instance ;
...
Рейтинг: 0 / 0
Friday pattern
    #38612094
DEVcoach
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Atum1 ,
Ну а что означают фигурные скобки в теле класса? :)
...
Рейтинг: 0 / 0
Friday pattern
    #38612534
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DEVcoach,

ерунда получилась :)
...
Рейтинг: 0 / 0
Friday pattern
    #38619047
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Bridge Design Pattern

Шаблон мост — структурный шаблон проектирования, используемый в проектировании программного обеспечения чтобы «разделять абстракцию и реализацию так, чтобы они могли изменяться независимо».

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


Когда абстракция и реализация разделены, они могут изменяться независимо. Другими словами, при реализации через паттерн мост, изменение структуры интерфейса не мешает изменению структуры реализации.




//Create bridge implementer interface.
//DrawAPI.java
Код: java
1.
2.
3.
public interface DrawAPI { 
 public void drawCircle(int radius, int x, int y); 
} 




//Create concrete bridge implementer classes implementing the DrawAPI interface.
//RedCircle.java
Код: java
1.
2.
3.
4.
5.
6.
7.
public class RedCircle implements DrawAPI { 
 @Override 
 public void drawCircle(int radius, int x, int y) { 
 System.out.println("Drawing Circle[ color: red, radius: " 
 + radius +", x: " +x+", "+ y +"]"); 
 } 
} 



//GreenCircle.java
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
public class GreenCircle implements DrawAPI { 
 @Override 
 public void drawCircle(int radius, int x, int y) { 
 System.out.println("Drawing Circle[ color: green, radius: " 
 + radius +", x: " +x+", "+ y +"]"); 
 } 
} 
 



//Create an abstract class Shape using the DrawAPI interface.
//Shape.java
Код: java
1.
2.
3.
4.
5.
6.
7.
public abstract class Shape { 
 protected DrawAPI drawAPI; 
 protected Shape(DrawAPI drawAPI){ 
 this.drawAPI = drawAPI; 
 } 
 public abstract void draw(); 
} 


//Circle.java
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
public class Circle extends Shape { 
 private int x, y, radius; 
 
 public Circle(int x, int y, int radius, DrawAPI drawAPI) { 
 super(drawAPI); 
 this.x = x; 
 this.y = y; 
 this.radius = radius; 
 } 
 
 public void draw() { 
 drawAPI.drawCircle(radius,x,y); 
 } 
}



//BridgePatternDemo.java
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
public class BridgePatternDemo { 
 public static void main(String[] args) { 
 Shape redCircle = new Circle(100,100, 10, new RedCircle()); 
 Shape greenCircle = new Circle(100,100, 10, new GreenCircle()); 
 
 redCircle.draw(); 
 greenCircle.draw(); 
 } 
} 



Код: java
1.
2.
Drawing Circle[ color: red, radius: 10, x: 100, 100] 
Drawing Circle[ color: green, radius: 10, x: 100, 100]


...
Рейтинг: 0 / 0
Friday pattern
    #38626456
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Filter Design Pattern

Паттерн Фильтр - является шаблоном проектирования, что позволяет разработчикам выбирать набор объектов, используя различные критерии через логические операции.сбор нескольких критериев под одну схему.


Person.java
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
public class Person { 
 
 private String name; 
 private String gender; 
 private String maritalStatus; 
 
 public Person(String name,String gender,String maritalStatus){ 
 this.name = name; 
 this.gender = gender; 
 this.maritalStatus = maritalStatus; 
 } 
 
 public String getName() { 
 return name; 
 } 
 public String getGender() { 
 return gender; 
 } 
 public String getMaritalStatus() { 
 return maritalStatus; 
 } 
} 



Criteria.java
Код: java
1.
2.
3.
4.
5.
import java.util.List; 
 
public interface Criteria { 
 public List<Person> meetCriteria(List<Person> persons); 
} 




CriteriaMale.java
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
import java.util.ArrayList; 
import java.util.List; 
 
public class CriteriaMale implements Criteria { 
 
 @Override 
 public List<Person> meetCriteria(List<Person> persons) { 
 List<Person> malePersons = new ArrayList<Person>(); 
 for (Person person : persons) { 
 if(person.getGender().equalsIgnoreCase("MALE")){ 
 malePersons.add(person); 
 } 
 } 
 return malePersons; 
 } 
} 




CriteriaFemale.java
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
import java.util.ArrayList; 
import java.util.List; 
 
public class CriteriaFemale implements Criteria { 
 
 @Override 
 public List<Person> meetCriteria(List<Person> persons) { 
 List<Person> femalePersons = new ArrayList<Person>(); 
 for (Person person : persons) { 
 if(person.getGender().equalsIgnoreCase("FEMALE")){ 
 femalePersons.add(person); 
 } 
 } 
 return femalePersons; 
 } 
}




AndCriteria.java
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
import java.util.List; 
 
public class AndCriteria implements Criteria { 
 
 private Criteria criteria; 
 private Criteria otherCriteria; 
 
 public AndCriteria(Criteria criteria, Criteria otherCriteria) { 
 this.criteria = criteria; 
 this.otherCriteria = otherCriteria; 
 } 
 
 @Override 
 public List<Person> meetCriteria(List<Person> persons) { 
 List<Person> firstCriteriaPersons = 
criteria.meetCriteria(persons); 
 return otherCriteria.meetCriteria(firstCriteriaPersons); 
 } 
} 




OrCriteria.java
Код: 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.
import java.util.List; 
 
public class AndCriteria implements Criteria { 
 
 private Criteria criteria; 
 private Criteria otherCriteria; 
 
 public AndCriteria(Criteria criteria, Criteria otherCriteria) { 
 this.criteria = criteria; 
 this.otherCriteria = otherCriteria; 
 } 
 
 @Override 
 public List<Person> meetCriteria(List<Person> persons) { 
 List<Person> firstCriteriaItems = criteria.meetCriteria(persons); 
 List<Person> otherCriteriaItems = 
otherCriteria.meetCriteria(persons); 
 
 for (Person person : otherCriteriaItems) { 
 if(!firstCriteriaItems.contains(person)){ 
 firstCriteriaItems.add(person); 
 } 
 } 
 return firstCriteriaItems; 
 } 
} 



CriteriaPatternDemo.java

Код: 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.
public class CriteriaPatternDemo { 
 public static void main(String[] args) { 
 List<Person> persons = new ArrayList<Person>(); 
 
 persons.add(new Person("Robert","Male", "Single")); 
 persons.add(new Person("John","Male", "Married")); 
 persons.add(new Person("Laura","Female", "Married")); 
 persons.add(new Person("Diana","Female", "Single")); 
 persons.add(new Person("Mike","Male", "Single")); 
 persons.add(new Person("Bobby","Male", "Single")); 
 
 Criteria male = new CriteriaMale(); 
 Criteria female = new CriteriaFemale(); 
 Criteria single = new CriteriaSingle(); 
 Criteria singleMale = new AndCriteria(single, male); 
 Criteria singleOrFemale = new OrCriteria(single, female); 
 
 System.out.println("Males: "); 
 printPersons(male.meetCriteria(persons)); 
 
 System.out.println("\nFemales: "); 
 printPersons(female.meetCriteria(persons)); 
 
 System.out.println("\nSingle Males: "); 
 printPersons(singleMale.meetCriteria(persons)); 
 
 System.out.println("\nSingle Or Females: "); 
 printPersons(singleOrFemale.meetCriteria(persons)); 
 } 
 
 public static void printPersons(List<Person> persons){ 
 for (Person person : persons) { 
 System.out.println("Person : [ Name : " + person.getName() 
 +", Gender : " + person.getGender() 
 +", Marital Status : " + person.getMaritalStatus() 
 +" ]"); 
 } 
 } 
}





Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
Males: 
Person : [ Name : Robert, Gender : Male, Marital Status : Single ] 
Person : [ Name : John, Gender : Male, Marital Status : Married ]  

Person : [ Name : Mike, Gender : Male, Marital Status : Single ] 
Person : [ Name : Bobby, Gender : Male, Marital Status : Single ] 
 
Females: 
Person : [ Name : Laura, Gender : Female, Marital Status : Married ] 
Person : [ Name : Diana, Gender : Female, Marital Status : Single ] 
 
Single Males: 
Person : [ Name : Robert, Gender : Male, Marital Status : Single ] 
Person : [ Name : Mike, Gender : Male, Marital Status : Single ] 
Person : [ Name : Bobby, Gender : Male, Marital Status : Single ] 
 
Single Or Females: 
Person : [ Name : Robert, Gender : Male, Marital Status : Single ] 
Person : [ Name : Diana, Gender : Female, Marital Status : Single ] 
Person : [ Name : Mike, Gender : Male, Marital Status : Single ] 
Person : [ Name : Bobby, Gender : Male, Marital Status : Single ] 
Person : [ Name : Laura, Gender : Female, Marital Status : Married ] 


...
Рейтинг: 0 / 0
Friday pattern
    #38626457
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В java 8 все это будет выглядеть более лаконично
...
Рейтинг: 0 / 0
Friday pattern
    #38626466
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гониво какое-то. Любой адекватный разработчик знающий алгоритмы делает фильтры без
этой схемы так же легко как птица летает и рыба плавает. К чему нужно засорять себе
моск этими заумными диаграммами?
...
Рейтинг: 0 / 0
Friday pattern
    #38626595
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonГониво какое-то. Любой адекватный разработчик знающий алгоритмы делает фильтры без
этой схемы так же легко как птица летает и рыба плавает. К чему нужно засорять себе
моск этими заумными диаграммами?

Ваш пример . тут идет обсуждение примеров - фактически создание библиотеки классов помощников и общих подходов.
...
Рейтинг: 0 / 0
Friday pattern
    #38626758
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1maytonГониво какое-то. Любой адекватный разработчик знающий алгоритмы делает фильтры без
этой схемы так же легко как птица летает и рыба плавает. К чему нужно засорять себе
моск этими заумными диаграммами?

Ваш пример . тут идет обсуждение примеров - фактически создание библиотеки классов помощников и общих подходов.
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
public class Filters{

 public static List<Person> getSignleOrFemale(List<Person> persons){
  List<Person> lp = new ....();

  for(Person person : persons){
   if(person.isSingle || person.isFemale)
    lp.add(person);
  }
  return lp;
 }

}
...
Рейтинг: 0 / 0
Friday pattern
    #38626783
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Еще профит, вместо List использовать Set.
...
Рейтинг: 0 / 0
Friday pattern
    #38633143
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
no56892Еще профит, вместо List использовать Set.

в реализации set = есть внутренняя проверка по ключу - это лишнее время .
Профит это или нет - нужно еще понять .
...
Рейтинг: 0 / 0
Friday pattern
    #38633583
no56892
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1no56892Еще профит, вместо List использовать Set.

в реализации set = есть внутренняя проверка по ключу - это лишнее время .
Профит это или нет - нужно еще понять .
Ну это да, но в тоже время при использовании фильтров Вы повторно отбираете значения, но уже в самом фильтре. И если учесть, что количество операций добавления заменто меньше чем получения через фильтр, то все-таки профит.
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
Friday pattern
    #39530776
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день

какой паттерн тут нужно применить ?

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
@Data
public class Response<T> {

    private T result;
    private ApiError error;

    private BaseRpcResponse(MethodResult<T> result) {
        if(result.isSuccess())
            this.result = result.getResult();
        else
            this.error = result.getError();
    }

}
...
Рейтинг: 0 / 0
Friday pattern
    #39530862
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1какой паттерн тут нужно применить ?

Патерн "пустышка"?
Зачем?
Чем отличается Response и MethodResult?
...
Рейтинг: 0 / 0
Friday pattern
    #39530876
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Alexey TominПатерн "пустышка"?
Зачем?
Чем отличается Response и MethodResult?
Очевидно что это DTO, но, в целом, реализация так себе. Где гарантии что success синхронизирован с состоянием result/error? Зачем вообще условие, почему бы просто не присвоить оба?
...
Рейтинг: 0 / 0
Friday pattern
    #39530885
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
MethodResult привожу


Код: 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.
@Data
public class MethodResult<T> {

    private enum Status {
        SUCCESS, ERROR;
    }

    @Getter(AccessLevel.NONE)
    private Status status;
    private T result;
    private ApiError error;

    public boolean isSuccess(){
        return status == Status.SUCCESS;
    }

    private MethodResult(){}

    public static MethodResult success(Object result) {
        MethodResult methodResult = new MethodResult();
        methodResult.setStatus(Status.SUCCESS);
        methodResult.setResult(result);
        return methodResult;
    }

    public static MethodResult error(String error) {
        MethodResult methodResult = new MethodResult();
        methodResult.setStatus(Status.ERROR);
        methodResult.setError(new ApiError(error));
        return methodResult;
    }


}


...
Рейтинг: 0 / 0
Friday pattern
    #39530889
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Любовь к if - else ?

как то лечится ?

нужно дать рекомендации по рефакторингу ... - как есть ,и как нужно ...


Код: 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.
@Override
    public List<Document> document() {
        Map<String, BeanWithMethod> map = beanAnnotationMethods.getBeansAnnotatedMethods();
        List<Document> documents = new ArrayList<>();

        map.forEach((k,v)->{
            Document document = new Document();
            document.setMethodName(k);

            List<Parameter> Parameters = new ArrayList<>();
            for(Parameter parameter : v.getMethod().getParameters()){
                if(!parameter.getType().equals(User.class)) {
                    Parameter parameter = new Parameter();
                    parameter.setName(parameter.getName());
                    if(isSimpleObject(parameter.getType()))
                        parameter.setType(parameter.getType().getTypeName());
                    else if(isEnum(v.getMethod().getReturnType()))
                        parameter.setType("{" + Arrays.stream(v.getMethod().getReturnType().getEnumConstants())
                                .map(Object::toString)
                                .collect(Collectors.joining(", ")) + "}");
                    else
                        parameter.setParameters(getParamsFromComplexClass(parameter.getType()));
                    parameters.add(parameter);
                }
            }

            document.setInParams(parameters);

            Parameter outParam = new Parameter();
            outParam.setName("return");
            if(isSimpleObject(v.getMethod().getReturnType()))
                outParam.setType(v.getMethod().getReturnType().getSimpleName());
            else if(isEnum(v.getMethod().getReturnType()))
                outParam.setType("{" + Arrays.stream(v.getMethod().getReturnType().getEnumConstants())
                        .map(Object::toString)
                        .collect(Collectors.joining(", ")) + "}");
            else
                outParam.setParameters(getParamsFromMethod(v.getMethod()));


            document.setOutParam(outParam);

            documents.add(document);
        });

        return documents;
    }





прошу от троллинга воздержаться спасибо .

такой код тестами не покрыт , да и как ?

другое дело начать писать код через TDD - тогда в принципе такой стиль был бы не возможен
...
Рейтинг: 0 / 0
Friday pattern
    #39530910
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczAlexey TominПатерн "пустышка"?
Зачем?
Чем отличается Response и MethodResult?
Очевидно что это DTO, но, в целом, реализация так себе. Где гарантии что success синхронизирован с состоянием result/error? Зачем вообще условие, почему бы просто не присвоить оба?


Присвоить оба - это видимо была идея - шаблона RESULT<T>

Книжная реализация :

The Result Data Transfer Object
The service layer will communicate with the request handling tier through
interfaces that return Result Data Transfer Objects (DTO). The DTO design
pattern is commonly used in enterprise application programming to transfer data
between different layers or subsystems. Our Result DTO will have the following
three properties:
• boolean success : This property is used if the action was successful and an
appropriate data payload is available
• String msg : This is a message that may be used by the client for logging or
informational purposes
• <T> data : This is a generically typed data payload that will be consumed by
the request handling layer
The Result class is also a Value Object (VO), an immutable object whose state
cannot be changed after creation. Each instance variable is marked final and we
will use an appropriate ResultFactory method to create the value object instance.
Value objects are a concept used in Domain-Driven Design to represent data without
any conceptual identity. You can find out more about Domain-Driven Design at
http://en.wikipedia.org/wiki/Domain-driven_design . The definition of the



Код: 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.
package com.gieman.tttracker.vo;
  import java.io.Serializable;
  import java.util.List;
  import java.util.Objects;


public class Result<T> implements Serializable {
      final private boolean success;
      final private T data;
      final private String msg;

Result(boolean success, T data) {
   this.success = success;
   this.data = data;
   this.msg = null;
}

Result(boolean success, String msg) {
    this.success = success;
    this.data = null;
    this.msg = msg;
}

public boolean isSuccess() {
    return success;
}

public T getData() {
  return data;
}

public String getMsg() {
  return msg;
}



Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
package com.gieman.tttracker.vo;
public class ResultFactory {
   public static <T> Result<T> getSuccessResult(T data) {
        return new Result(true, data);
   }


 public static <T> Result<T> getSuccessResult(T data, String msg) {
           return new Result(true, msg);
}

public static <T> Result<T> getSuccessResultMsg(String msg) {
     return new Result(true, msg);
 }

public static <T> Result<T> getFailResult(String msg) {
   return new Result(false, msg);
 }

}




...
Рейтинг: 0 / 0
25 сообщений из 79, страница 3 из 4
Форумы / Java [игнор отключен] [закрыт для гостей] / Friday pattern
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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