Методы в классе с логикой другого класса должны быть статическими?

Например есть класс Human, у него есть некоторые поля, но действий которые он может выполнить очень много и нужно отделить его поведение в другой класс с логикой HumanLogic, можно ли эти действия там делать static методами? Если нет то как ими воспользоваться не создавая объекта HumanLogic?


Ответы (1 шт):

Автор решения: Elizaveta

Есть замечательная вещь, dependency injection)) "Правила хорошего тона" Статические методы/классы противопоказаны, их трудно тестировать/мокать

В идеале, можно воспользоваться функциональным программированием. Кривой пример:

public class HumanLogic {
  public boolean solveProblem(Supplier<String> problemProvider) {
     System.out.println("Solving " + problemProvider.get() + "..." ) ;
     //stupid example
     return true;
  } 
} 

==============

public class Human {

    private final HumanLogic brain;

    //dependency injection!! 
    public Human (HumanLogic brain) {
         this.brain = brain;
    } 

    public void doSomething() {
       boolean solved = brain.solveProblems(() -> "homework") ;
        System.out.println ("Task solved? : " + solved) ;
    } 

    public static void main(String... args) {
        Human human = new Human(new HumanLogic()) ;
        human.doSomething() ;
    } 
} 

Както так

→ Ссылка