java中的复合模式

java中的复合模式,java,composite,Java,Composite,我现在正在开发一个程序,它允许你创建形状(正方形、矩形和圆形)。你也可以通过选择已经创建的形状来创建复合形状……我使用两个观察者来观察这些形状。一个用于正方形/矩形,一个用于大圆,这些观察者列出了形状的参考点和大小。创建复合形状时,如果复合形状中有正方形/矩形,则应在正方形/矩形框中列出组件 我应该使用复合图案创建复合形状。所以基本上复合形状和我的圆,正方形和矩形需要以同样的方式处理 我有一个叫做形状的对象数组,复合形状是一个包含形状数组的对象 我的问题是,如何在形状数组中检查复合形状类型的对象

我现在正在开发一个程序,它允许你创建形状(正方形、矩形和圆形)。你也可以通过选择已经创建的形状来创建复合形状……我使用两个观察者来观察这些形状。一个用于正方形/矩形,一个用于大圆,这些观察者列出了形状的参考点和大小。创建复合形状时,如果复合形状中有正方形/矩形,则应在正方形/矩形框中列出组件

我应该使用复合图案创建复合形状。所以基本上复合形状和我的圆,正方形和矩形需要以同样的方式处理

我有一个叫做形状的对象数组,复合形状是一个包含形状数组的对象

我的问题是,如何在形状数组中检查复合形状类型的对象,然后在复合形状数组中检查矩形或正方形的实例

很抱歉没有包含代码,但我的程序有点大,有很多类

下面是我用来检查square或rectangle实例的方法……这两个方法在两个不同的类中。当形状只是简单形状而复合形状不显示时,形状显示在右观察者窗口中。例如,如果我有一个包含3个形状的形状列表……形状1是一个大圆,形状2是一个复合形状,形状3是一个矩形。假设复合形状有两个正方形。现在,这将显示大圆和矩形,但不会显示复合形状组件。我想,一旦我到达compoundShape,instanceof将看起来像从compundshape数组中选择一个正方形或矩形的instanceof

这里是复合形状串法

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

public boolean squareRectangleFinder() {
    if ((shapes[currentShape] instanceof Square)||(shapes[currentShape] instanceof Rectangle)){
        return true;
    }
    return false;
}
我想这就是“复合模式”应该做的。根据:

客户端应该忽略对象和单个对象的组合之间的差异

据我所知,应该这样做(getter/setter,add/remove操作省略):

界面形状{
public int getLeftmostCoordinate();
}
类矩形实现形状{
私人int top;
私有int左;
私有整数宽度;
私人内部高度;
public int getLeftmostCoordinate(){
左转;
}
}
类圆形实现形状{
私人INTX;
私营企业;
私人INTR;
public int getLeftmostCoordinate(){
返回x-r;
}
}
类CompoundShape实现形状{
私有形状[]形状;
public int getLeftmostCoordinate(){
int left=shapes[0]。getLeftmostCoordinate();
对于(int i=1;i我想这就是“复合模式”应该做的。根据:

客户端应该忽略对象和单个对象的组合之间的差异

据我所知,应该这样做(getter/setter,add/remove操作省略):

界面形状{
public int getLeftmostCoordinate();
}
类矩形实现形状{
私人int top;
私有int左;
私有整数宽度;
私人内部高度;
public int getLeftmostCoordinate(){
左转;
}
}
类圆形实现形状{
私人INTX;
私营企业;
私人INTR;
public int getLeftmostCoordinate(){
返回x-r;
}
}
类CompoundShape实现形状{
私有形状[]形状;
public int getLeftmostCoordinate(){
int left=shapes[0]。getLeftmostCoordinate();

对于(int i=1;就像一个家庭作业)……认为你不应该“检查”。。您需要通过复合类公共接口抽象和提供哪些行为或属性?或者可能通过共享接口所有形状共享。您可以使用
instanceof
运算符检查数组中的元素是否为复合类的实例。这是真的,但可能不符合精神“我用两个观察者观察形状。一个观察正方形/矩形,另一个观察大圆”,这是另一个听起来像是课堂设计中的问题。例如,
squarectanglefinder()
问题可以通过添加方法
isrectangle()来解决
Shape
。如果这是所有形状的一个重要属性,那么就让它成为所有形状的一个属性。或者添加一个类
矩形形状
,它定义了这个属性和子类
重角
方形
。在阅读了维基百科的文章后,我很清楚复合模式是关于不使用的D< > .-你只需要在一个普通的CopyFrand上实现相同的功能。听起来像是一个家庭作业……认为你不应该“检查”。。您需要通过复合类公共接口抽象和提供哪些行为或属性?或者可能通过共享接口所有形状共享。您可以使用
instanceof
运算符检查数组中的元素是否为复合类的实例。这是真的,但可能不符合精神“我用两个观察者观察形状。一个观察正方形/矩形,另一个观察大圆”,这是另一个听起来像是课堂设计中的问题。例如,
squarectanglefinder()
问题可以通过添加方法
isrectangle()来解决
Shape
。如果这是所有形状的一个重要属性,那么就让它成为所有形状的一个属性。或者添加一个类
矩形形状
,它定义了这个属性和子类
重角
方形
。在阅读了维基百科的文章后,我很清楚复合模式是关于不使用的de>实例
public boolean squareRectangleFinder() {
    if ((shapes[currentShape] instanceof Square)||(shapes[currentShape] instanceof Rectangle)){
        return true;
    }
    return false;
}
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;
    }
}