Sorry for the question title. I am having a hard time putting this into words. I do not even know how you could call what I am doing. **I appreciate an edit.**  

Please have a look at my example.  

I like about the first example that it is a simple call in a single line. Also note: BasicJokeGenerator is **only** used by GoodJokeGenerator. Reason for splitting is, classes are both already quite long.  

The second example allows you to test `GoodJokeGenerator#generate()` independently from `BasicJokeGenerator` and feels cleaner.

```
class JokePrinter{
    printJoke(){
        System.out.println(GoodJokeGenerator.generate(String topic));
    }
}

class GoodJokeGenerator{
    String generate(String topic){
        String joke = BasicJokeGenerator.generate(topic);
        // ... some logic to make it really good
        return joke;
    }
}

```

OR

```
class JokePrinter{
    printJoke(){
        String basicJoke = BasicJokeGenerator.generate(topic);
        System.out.println(GoodJokeGenerator.generate(String basicJoke));
    }
}

class GoodJokeGenerator{
    String generate(String joke){
        // ... some logic to make it really good
        return joke;
    }
}

```