1

私は現在、形状 (正方形、長方形、円) を作成できるプログラムに取り組んでいます。また、既に作成された形状を選択して複合形状を作成するオプションもあります...形状に 2 つのオブザーバーを使用しています。1 つは正方形/長方形用、もう 1 つは大きな円用で、これらのオブザーバーは形状の基準点とサイズをリストします。複合形状が作成されると、複合形状に正方形/長方形がある場合、正方形/長方形のフレームにコンポーネントがリストされます。

複合パターンを使用して複合形状を作成することになっています。したがって、基本的に複合形状と私の円、正方形、および長方形は同じ方法で処理する必要があります

形状と呼ばれるオブジェクトの配列があり、複合形状は形状の配列を持つオブジェクトです。

私の質問は、形状配列で複合形状のオブジェクトをチェックし、複合形状配列で長方形または正方形のインスタンスをチェックするにはどうすればよいですか?

コードを含めなくて申し訳ありませんが、私のプログラムは多くのクラスでやや大きくなっています

正方形または長方形のインスタンスをチェックするために使用するメソッドを次に示します...これら 2 つのメソッドは 2 つの異なるクラスに属しています。形状は単純な形状であり、複合形状は表示されない場合、右側のオブザーバー ウィンドウに表示されます。たとえば、3 つの形状を含む形状リストがある場合、形状 1 は大きな円、形状 2 は複合形状、形状 3 は長方形です。そして、複合形状に 2 つの正方形があるとしましょう。現在、これは大きな円と長方形を表示しますが、複合形状コンポーネントは表示しません。私は、compoundShape に到達すると、instanceof が compundshape 配列から正方形または長方形のインスタンスを選択するように見えると考えました

複合形状の toString メソッドを次に示します。

public String toString(){
    String output="";
    output += "Compound Shape: /n";
    for (int i = 0; i< numShapes; i++){
        output += shapes[i].toString();
    }
    return output;
}

正方形または長方形のインスタンスを探すために使用する do メソッドを次に示します。

do {//squares rectangles
        currentShape = shapes.getShape();
        if (shapes.squareRectangleFinder())
            outputString1 += currentShape.toString();
    }while (shapes.next());

そしてこちらがスクエアファインダー法

public boolean squareRectangleFinder() {
    if ((shapes[currentShape] instanceof Square)||(shapes[currentShape] instanceof Rectangle)){
        return true;
    }
    return false;
}
4

1 に答える 1

1

これが「複合パターン」がすべきことだと思います。ウィキペディアによると:

クライアントは、オブジェクトの構成と個々のオブジェクトの違いを無視する必要があります

私の理解では、これは次のように実行する必要があります(getters / setters、add / remove操作は省略):

interface Shape {
    public int getLeftmostCoordinate();
}

class Rectangle implements Shape {
    private int top;
    private int left;
    private int width;
    private int height;

    public int getLeftmostCoordinate() {
        return left;
    }
}

class Circle implements Shape {
    private int x;
    private int y;
    private int r;

    public int getLeftmostCoordinate() {
        return x - r;
    }
}

class CompoundShape implements Shape {
    private Shape[] shapes;

    public int getLeftmostCoordinate() {
        int left = shapes[0].getLeftmostCoordinate();

        for (int i=1; i<shapes.length; i++) {
            int candidate = shapes[i].getLeftmostCoordinate();
            if (candidate < left) {
                left = candidate;
            }
        }

        return left;
    }
}
于 2012-11-22T23:47:25.390 に答える