問題タブ [gang-of-four]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Java インターフェイスの設計パターンの状況
問題が発生しました。私の問題は次のようになります。スーパークラス Animal と 2 つのサブクラス Human And Bird があります。Flyable Interface に基づいてクラス Human と Bird の両方の実装を提供するスーパー クラス Animal に fly メソッドがあります。
私のAnimalクラスは次のようになります。
ヒューマンクラスはこんな感じ
バードクラスはこんな感じ
インターフェイスは以下のとおりです
電話すると
それは私に NullPointerException を与えます
ここで何が欠けていますか?
私は仮定していた。new Human() を呼び出しているので、スーパークラス Animal で Flyable インターフェイスを初期化します。私が間違っている?
メソッドの設計を変更することで、この問題を解決しました。
fly(Flyable flyable). だから私はその設計ソリューションを望んでいません。結果のリストを提供するアプリの検索アルゴリズムを実装していたときにこの問題に直面したことを覚えていますが、リスト項目には異なる
UI、
異なる End URL への https 呼び出し、
JSON の解析、
異なる POJO クラスへのマッピングがあります。
悲しいことに、私が言及した別のアプローチでその問題を解決しなければなりませんでした。
design-patterns - 抽象工場の動機をどう理解すればよいでしょうか?
GoFによるデザインパターンより
アブストラクトファクトリー
意図
具象クラスを指定せずに、関連オブジェクトまたは依存オブジェクトのファミリを作成するためのインターフェイスを提供します。
動機
Motif や Presentation Manager など、複数のルック アンド フィール標準をサポートするユーザー インターフェイス ツールキットを検討してください。さまざまなルック アンド フィールによって、スクロール バー、ウィンドウ、ボタンなどのユーザー インターフェイス "ウィジェット" のさまざまな外観と動作が定義されます。ルック アンド フィールの標準間で移植可能にするために、アプリケーションは、特定のルック アンド フィール用にウィジェットをハードコーディングしないでください。アプリケーション全体でウィジェットのルック アンド フィール固有のクラスをインスタンス化すると、後でルック アンド フィールを変更することが難しくなります。
この問題は、基本的な種類のウィジェットを作成するためのインターフェイスを宣言する抽象 WidgetFactory クラスを定義することで解決できます。ウィジェットの種類ごとに抽象クラスもあり、具象サブクラスは特定のルック アンド フィール標準のウィジェットを実装します。WidgetFactory のインターフェースには、抽象ウィジェット クラスごとに新しいウィジェット オブジェクトを返す操作があります。クライアントはこれらの操作を呼び出してウィジェット インスタンスを取得しますが、クライアントは使用している具象クラスを認識しません。したがって、クライアントは一般的なルック アンド フィールから独立したままになります。
私は次の意味が何を意味するのか疑問に思っていました:
ルック アンド フィールの標準間で移植可能にするために、アプリケーションは、特定のルック アンド フィール用にウィジェットをハードコーディングしないでください。
と
アプリケーション全体でウィジェットのルック アンド フィール固有のクラスをインスタンス化すると、後でルック アンド フィールを変更することが難しくなります。
特に、抽象ファクトリ クラスを使用しない場合、コードはどのように見え、なぜ悪いのでしょうか? ありがとう。