このファクトリー型パターンの名前は何ですか?UMLでどのように表現しますか?

StackOverflow https://stackoverflow.com/questions/629997

  •  08-07-2019
  •  | 
  •  

質問

例:いくつかのタイプがあります。ホイール、ブレーキ、エンジン、クラッチ、オートボックス、マニュアルボックス、ElectricWindow、RearParkingSensor、HeatedSeats。これらはすべてICarPartマーカーインターフェイスを継承します(属性(javaアノテーション)である可能性がありますが、この段階では重要ではありません)。

次に、すべての車種を表すことができるCarクラスを作成します。例:

class Car
{
    string Name;
    DateTime creationDate;
    string ID;

    IList<ICarPart> parts;
}

次に、自動車を作成する工場を作成します。工場は、さまざまな車種の原材料リストであるXMLを参照できます。例えば。 (そして、フォーマットを無視してください、これは単に説明のためです):

<ExpensiveCar>
  <Name>Expensive Car</Name>
  <Parts>
    <HeatedSeats/>
    <Wheel count=4/>
    <RearParkingSensor/>
    <ElectricWindow type=FrontAndBack/>
  </Parts>
</ExpensiveCar>

工場はこの成分リストを解析し、自動車オブジェクトを作成します。パーツがコード化され、成分リストがXMLで記述されていれば、新しい車種がシステムで利用可能になります。

質問:

  1. このパターンとは何ですか?または、複数のパターンが組み合わされているだけですか?
  2. これはアンチパターンですか?
  3. これをUMLで表すにはどうすればよいですか?パーツとベースカークラスのクラス図を作成できます。現在サポートされているクラスのインスタンスとそれらが持つ部分をどのように表示しますか?

事前に感謝します。不明な点がある場合はコメントしてください。詳細を修正/更新/提供します。

役に立ちましたか?

解決 3

  
      
  1. このパターンとは何ですか?または、複数のパターンが組み合わされているだけですか?
  2.   

説明されているパターンは、です。ビルダーパターン。ビルダーパターンは、一連の単純なパーツから複雑なオブジェクトを構築します。ビルダーパターンによって構築されるオブジェクトは、 Composite オブジェクト(質問の場合は必ずしも必要ではありません)。

ビルダーパターンは、ハードコードされた成分リストを使用してしばしば実証されますが、これを必要とするパターンには何もありませんし、「成分リスト」を説明する特定のパターンも文書化されていないようです。アプローチ。

  
      
  1. これはアンチパターンですか?
  2.   

いいえ

  
      
  1. これをUMLで表すにはどうすればよいですか?
  2.   

おそらく:

  1. Carクラスだけでなく、クラスとしてパーツを示すクラス図を定義します。各パーツクラスがICarPartインターフェイスを実装することを示します。
  2. おそらく、別個の(ただしリンクされた)クラス図は、UMLインスタンス表記を使用してcarクラスの名前付きインスタンスを表示します。インスタンスクラス表現を使用すると、属性がそのクラスに持つ値を指定できます。例:
------------------------------------------
|ExpensiveCar : Car                      |
------------------------------------------
|parts = {                               |  
|HeatedSeats,                            |
|Wheel (count = 4),                      |
|RearParkingSensor,                      |
|ElectricWindows (type = FrontAndBack) } |
------------------------------------------

これはインスタンスであるため、テキスト「quotensiveCar:Car」」に注意してください。下線を引く必要がありますが、SOではこれを許可していません。

ここで、パーツを使用して配列を初期化するために使用した表記法は素晴らしいものではなく、最良のアプローチではないかもしれません。おそらく別の方法は、実際のXMLを含むUMLメモを追加することです。重要なことは、クライアントは高価な車を作るものを見ることができ、プログラマも見ることができるということです。

他のヒント

  

このパターンは何と呼ばれていますか?それとも、複数のパターンが組み合わされているだけですか?

ファクトリーメソッドパターン(自動車オブジェクトの作成)がある古き良き構成(車輪、座席などから車を作る)。後者は構成のバリエーションです。

パーツのセットが相互に互換性があるようにしたいので、これは抽象ファクトリーパターンかもしれないと思います。おそらく、小型車のホイールにトラックタイヤが必要ないでしょう。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top