0

私はファクトリメソッドパターンを研究しており、いくつかの場所でリーダーの後、次の実装を行いました。将来、新しいタイプのボードを追加する必要がある場合、そのたびに BoardFactory クラスと列挙型を変更する必要がありますか? これはファクトリメソッドを実装する正しいアプローチですか?

public interface Board { }

public class MotherBoard implements Board { }

public class VideoBoard implements Board { }

public class AudioBoard implements Board { }

public enum BoardType {
    VIDEO,
    AUDIO,
    MOTHER_BOARD
}

public class BoardFactory {

    private BoardFactory() { }

    public static Board createBoard(BoardType boardType) {
        switch (boardType) {            
            case VIDEO:
                return new VideoBoard();
            case AUDIO:
                return new AudioBoard();
            default:
                return new MotherBoard();
        }
    }   
}

public class Main {
    public static void main(String[] args) {
        Board b1 = BoardFactory.createBoard(BoardType.VIDEO);
        Board b2 = BoardFactory.createBoard(BoardType.AUDIO);
        Board b3 = BoardFactory.createBoard(BoardType.MOTHER_BOARD);            
    }
}
4

1 に答える 1

1

ファクトリ パターンを使用していますが、使用されているパターンではファクトリ タイプを指定できないため (さまざまなタイプのBoardFactory.

Factory Method を使用する場合は、次のことを行う必要があります。

1) 「クリエーター」として機能する共通インターフェースまたは抽象クラスを定義する
2) クリエーターのインスタンスをインスタンス化し、静的修飾子を削除するcreateBoard

の線に沿った何か

abstract class AbstractFactory {
 public abstract BoardType createBoard(BoardType boardType);
}  

class BoardFactory extends AbstractFactory {
 // Implementation
}

class AwesomeBoardFactory extends AbstractFactory {
 // Implementation
}

public static void main(String[] args){
 AbstractFactory factory = new AwesomeFactory();
 Board b1 = factory.CreateBoard(BoardType.MOTHER_BOARD);
}

違いに関する読み物

于 2013-09-07T02:02:19.020 に答える