Javaの設計の質問なのですが・・?
リスナオブジェクトが外部から消される可能性があるとき
addしたListenerListからリスナオブジェクトをremoveしないと参照がのこってリスナオブジェクトがガベージコレクションされないですよね?

public class Class1 extends addXXXListener付きクラス{
  :
  addXXXListener(new XXXListener());
  :
}

まぁこんな感じでXXXListenerへ通知するのですが、たとえばXXXListenerが、ウインドウみたいやつで「X」ボタンが押されたときremoveXXXListener(XXXListener)したいのですが、、どうやって実現するのが一般的ですか?
XXXListenerからClass1へ破棄の通知をおくって、Class1でremoveしようと考えているのですが、なんだか複雑っぽくて・・もっとスマートな方法があれば教えて欲しいのですが