Se due classi non correlate hanno lo stesso comportamento, probabilmente stai meglio estraendo questo comportamento su qualche classe esterna isolata.
Nei tempi antichi, ciò avveniva molto spesso nelle classi di utilità. Quasi tutti i progetti là fuori avevano una classe "Utils" o "Tools" che aveva un po 'di roba varia per le operazioni su stringhe, alcune cose di numeri e chissà cos'altro. Questo non era esattamente il modo migliore per farlo, ma ha funzionato bene.
Al giorno d'oggi è comune separare la logica e i comportamenti non banali su classi diverse, e li stanno componendo insieme per ottenere l'effetto desiderato. Questo può essere fatto in diverse forme di diversa complessità, con sapori diversi che si adattano a diverse esigenze. Ognuno di loro ha alcuni pro e contro, e alcuni di loro non sono così validi se stai pensando di cambiare materiale nel prossimo futuro, ma potresti:
- Utilizzare una classe statica per fornire il comportamento necessario come metodo statico; (Veloce e semplice da fare, ma se il tuo metodo "Calcola" non è una funzione pura, evita questo.)
- Crea una classe esterna con il comportamento necessario e rendi le classi che ne hanno bisogno istanzialo da solo; (buono, ma facile da interrompere se le modifiche sono necessarie in futuro)
- Iniettare il comportamento necessario sul costruttore delle classi che ne hanno bisogno (manualmente o usando un framework di dipendenze per l'iniezione, se già lo si sta utilizzando). (Consiglio questo, personalmente. Non mi piacciono molto i framework DI ma, anche i DI fatti a mano possono fare un'enorme differenza).
e così via.
Non esiste un unico modo corretto per farlo a livello macro. Detto questo, la maggior parte delle soluzioni richiederà di isolare questo comportamento necessario da qualche altra parte, fuori da quelle classi, quindi hai un inizio!
Non copiare il codice copia-incolla!