2

従来のコードベースには、あまりにも多くのフィールド/責任を持つ非常に大きなクラスがあります。これが Pizza オブジェクトであると想像してください。

次のような非常に詳細なフィールドがあります。

  • ペパロニ
  • ソーセージ
  • hasBellPeppers

これらの 3 つのフィールドが真である場合、最高のピザがあることを私は知っています。ただし、このクラスは拡張や変更に対してオープンではないため、PizzaType や isSupreme() などを追加することはできません。コードベース全体の人々は、同じif(a && b && c) then isSupreme)ロジックをいたるところに複製しています。この問題はかなりの数の概念で発生するため、このオブジェクトを多くのサブオブジェクトに分解する方法を探しています。たとえば、疑似後方ビルダー パターンです。

PizzaType pizzaType = PizzaUnbuilder.buildPizzaType(Pizza); //PizzaType.SUPREME

Dough dough = PizzaUnbuilder.buildDough(Pizza);

これは正しいアプローチですか?このパターンはすでに存在しますか?

4

2 に答える 2

4

アダプターパターンはどうですか?

基本的には、Pizza クラスと簡単に行き来できる、本当に必要なすべての機能を備えたラッパー クラスです。

MenuPizza myPizza = new MenuPizza(pizza);
PizzaType pizzaType = myPizza.getPizzaType();
DoughType doughType = myPizza.getDoughType();

そして、逆の機能を提供できます...

MenuPizza otherPizza = new MenuPizza(PizzaType.SUPREME, DoughType.SOUR);
Pizza pizzaPOJO = otherPizza.getPizzaPOJO();
于 2010-04-29T07:19:48.407 に答える