コンストラクタと初期化メソッドの書き方で悩む

コンストラクタと初期化メソッドの書き方で悩む。パラメータの初期化をコンストラクタで行い、その他の振る舞いを初期化メソッドで行う (下の例で 1 + 2) のがベストか?

1. コンストラクタ内完結型

恐らく最も一般的な書き方。

public function Hoge(p0:int, p1:int, p2:int) {
this.p0 = p0;
this.p1 = p1;
this.p2 = p2;
}
var hoge:Hoge = new Hoge(1, 2, 3);

2. 初期化メソッド (private) 型

コンストラクタの中身を抽出した書き方。初期化メソッドを何度も使用できるが冗長になる。

public function Hoge(p0:int, p1:int, p2:int) {
initialize(p0, p1, p2);
}
private function initialize(p0:int, p1:int, p2:int):void {
this.p0 = p0;
this.p1 = p1;
this.p2 = p2;
}
var hoge:Hoge = new Hoge(1, 2, 3);

3. 初期化メソッド (public) 型

コンストラクタの中身を抽出して public にした書き方。インスタンスを先に生成しておいて遅延初期化できるが、初期化されていない場合のエラーハンドリングが必要。

public function Hoge() {
}
public function initialize(p0:int, p1:int, p2:int):void {
this.p0 = p0;
this.p1 = p1;
this.p2 = p2;
}
var hoge:Hoge = new Hoge();
hoge.initialize(1, 2, 3);