デコレータ パターンまたは戦略パターンを使用できる場合があります。
デコレータあり:
interface ChessPiece {
Set<Move> getPossibleMoves();
Image getAppearance();
}
class Pawn implements ChessPiece {
...
}
class Decorator implements ChessPiece {
ChessPiece decorated;
public Decorator(ChessPiece decorated_) {
this.decorated = decorated_;
}
@override
Set<Move> getPossibleMoves() {
Set<Move> result = decorated.getPossibleMoves();
// alter result
return result;
}
}
必要に応じて、Pawn
インスタンスをインスタンスに置き換えDecorated
ます。 そのため、 OpenSause の回答で述べたように、1 つのインスタンスを別のインスタンスに置き換える必要があります。
ChessPiece pawn = new Pawn;
...
pawn = new Decorated(pawn);
前もって計画するときは、戦略を使用できますが、実際にはクラスを変更していません:
interface PossibleMovesStrategy {
Set<Move> getPossibleMoves();
}
interface AppearanceStrategy {
Image getAppearance();
}
class ChangingChessPiece extends ChessPiece {
PossibleMovesStrategy posMoves;
AppearanceStrategy appearance;
@override
Set<Move> getPossibleMoves() {
return posMoves.getPossibleMoves();
}
@override
Image getAppearance() {
return appearance.getAppearance();
}
}