java中的复合模式
我现在正在开发一个程序,它允许你创建形状(正方形、矩形和圆形)。你也可以通过选择已经创建的形状来创建复合形状……我使用两个观察者来观察这些形状。一个用于正方形/矩形,一个用于大圆,这些观察者列出了形状的参考点和大小。创建复合形状时,如果复合形状中有正方形/矩形,则应在正方形/矩形框中列出组件 我应该使用复合图案创建复合形状。所以基本上复合形状和我的圆,正方形和矩形需要以同样的方式处理 我有一个叫做形状的对象数组,复合形状是一个包含形状数组的对象 我的问题是,如何在形状数组中检查复合形状类型的对象,然后在复合形状数组中检查矩形或正方形的实例 很抱歉没有包含代码,但我的程序有点大,有很多类 下面是我用来检查square或rectangle实例的方法……这两个方法在两个不同的类中。当形状只是简单形状而复合形状不显示时,形状显示在右观察者窗口中。例如,如果我有一个包含3个形状的形状列表……形状1是一个大圆,形状2是一个复合形状,形状3是一个矩形。假设复合形状有两个正方形。现在,这将显示大圆和矩形,但不会显示复合形状组件。我想,一旦我到达compoundShape,instanceof将看起来像从compundshape数组中选择一个正方形或矩形的instanceof 这里是复合形状串法java中的复合模式,java,composite,Java,Composite,我现在正在开发一个程序,它允许你创建形状(正方形、矩形和圆形)。你也可以通过选择已经创建的形状来创建复合形状……我使用两个观察者来观察这些形状。一个用于正方形/矩形,一个用于大圆,这些观察者列出了形状的参考点和大小。创建复合形状时,如果复合形状中有正方形/矩形,则应在正方形/矩形框中列出组件 我应该使用复合图案创建复合形状。所以基本上复合形状和我的圆,正方形和矩形需要以同样的方式处理 我有一个叫做形状的对象数组,复合形状是一个包含形状数组的对象 我的问题是,如何在形状数组中检查复合形状类型的对象
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;
}
}