私はデザイン・パターズを勉強していますが、私はより良い練習になるかどうかわかりません。ファクトリパターンまたは拡張メソッド?
私はクラス、名前、2種類のURL、関連のリストオブジェクト。基本的には、そのクラスのインスタンスからHTMLを生成するメソッド 'toHtml()'があります。
正確に同じフィールドを持つ 'カテゴリ'には4つの異なるタイプがありますが、 'toHtml()'メソッドはそれぞれ異なる結果を与える必要があります。
異なるHTMLを生成するためにパラメータ "タイプ"と一連のifs/switch文を渡す必要があるかどうかわからない場合や、カテゴリクラス抽象クラスを作成してtoHtml()メソッドをオーバーライドするいくつかのサブクラスを作成し、 CategoryFactoryクラスを使用してそれらを生成しますか?どちらの場合も、私は '型'パラメータを渡す必要があります。
私は「修正のために閉じる、拡張のために開く」OOPルールについて考えようとしました。しかし、この場合、もし私が5番目のカテゴリ型を追加したいのであれば、それは別のhtmlを生成する - 最初の解決策として、私はtoHtmlメソッド(ifをもう1つ追加する)を修正する必要がある。 CategoryFactoryクラスを変更します。
もっと良い方法はありますか?同じような種類のジレンマがある場合、私が従うべき余分な規則はありますか?
カテゴリクラスを抽象クラスにし、各タイプごとに拡張し、各タイプに独自のtoHTML()を持たせます。あなたの抽象クラスでデフォルトのtoHTML()を作成することを控えて、クラスが独自に実装するようにすることをお勧めします。 –
あなたのアドバイスは本当にありがとう@RAZ_Muh_Taz! – x1r15