 <p>Your <code>ClickListener</code> is an inner non-static class the coupling of this 'has-a' is no different than if your class <code>Activity</code> implemented <code>View.OnClickListener</code>. This is because your inner <code>ClickListener</code> requires an instance of <code>ActivityMain</code> and really can't be reused. I would argue that you're over engineering and aren't actually gaining anything. </p> <p>EDIT: To answer your question I like to have anonymous <code>View.OnClickListener</code> for each widget. I think this creates the best separation of logic. I also have methods like <code>setupHelloWorldTextView(TextView helloWorldTextView);</code> where I put all my logic related to that widget.</p>