1

私は本FirstJava:Design Patternsを読み、初心者です。

私は練習用に独自のゲームエンジンを作成しており、シングルトンパターン(ほとんどの人にとっては罪だと思います)を使用して、InputManager、ScreenManager、GameManagerなどのユニークなクラスを作成しています。私は流れに逆らいたくありません。

ファクトリメソッドを使用してこのクラスを作成し(おそらく内部クラスとして作成し)、それらのオブジェクトを必要なクラスに渡す方が賢明ですか?

それも悪い習慣ですか?

これらの一意のクラスのインスタンスが1つと、それらにアクセスする方法が1つしかないことを確認したいだけです。

多分次のようなものです:

public final class Factory(){
private static final InputListener inputlst = new InputListener();  
private static final Screen window = new Screen();
private static final GameManager gameManager = new GameManager();
public Factory(){
}
public static InputListener getInputListener(){
    return inputlst;
}
public static Screen getWindow(){
    return window;
}
private static class InputListener implements KeyListener, MouseListener, MouseMotionListener, MouseWheelListener{      
}
private static class Screen extends JFrame{
}
private static class GameManager{
}
4

3 に答える 3

1

率直に言って、パターンは理由があります。理由は簡単です。今後、コードにどのような変更が予想されますか。のようなものはありませんgood practice to use patterns。変更を期待する場所を使用します。変更を期待する場所に基づいて、変化する部分を取得し、一定のままの部分から分離する必要があります。このパターンを実行すると、理解に役立ちます。

SINGLETONは悪ではありません。その使用法は悪です。シングルトンは、OOPとOOADの非常にユニークな問題を解決するために使用される素晴らしいパターンです。

SINGLETONの代わりにファクトリーを使用することはできません。どちらも非常にユニークな提案があります。要件(および将来の要件)を注意深く理解するために時間をかけると、両方を組み合わせて使用​​する必要があることに気付くかもしれません。必要なファクトリは1つだけで、そのファクトリをシングルトンにする必要がある場合があります。

Understand the change, the future change and separate out what changes from what remains constant

于 2013-01-31T07:20:11.473 に答える
1

これらの一意のクラスのインスタンスが1つと、それらにアクセスする方法が1つしかないことを確認したいだけです。

私にはシングルトンパターンのように聞こえます。クラス内の静的アクセサーは、そのクラスの単一インスタンスを返します。

絶対に必要であることがわかった場合を除いて、内部クラスで物事を前もって複雑にしすぎたり、物事を渡したりしないでください。役立つ可能性のある詳細については、シングルトンパターンとファクトリパターンの違いを参照してください。

于 2013-01-31T06:54:41.817 に答える
1

これらの一意のクラスのインスタンスを1つだけにしたい場合は、getInstanceなどのメソッドを使用するパターンがシングルトンです。

ファクトリパターンは、異なるタイプの新しいオブジェクトを作成して返すパターンですが、同じサブクラスから拡張されます。これは、クラスのインスタンス化を抽象化する方法です。

于 2013-01-31T07:15:35.410 に答える