组合对象是要将多个元素作为一个对象来处理,您需要将它们
组合。
术语简介
例如,创建了一幅绘画后(如树或花),可以将该绘画的元素合成一组,这样就可以将该绘画当成一个整体来选择和移动。
一个含有其他类对象的类称为组合类,组合类的对象称为组合对象。
对象的组合
一个类可以把对象作为自己的成员变量,如果用这样的类创建对象,那么该对象中就会有其它对象,也就是说该对象将其他对象作为自己的组成部分(这就是人们常说的Contains-A),或者说该对象是由几个对象组合而成。
举例
/**
* 定义矩形类
* @author 郎行天下
*/
class Rectangle {
// 成员变量
private double x, y, height, width;
// 构造方法
Rectangle() {}
// 取得左顶点的横坐标
public double getX() {
return x;
}
// 设置左顶点的横坐标
public void setX(double x) {
this.x = x;
}
// 取得左顶点的纵坐标
public double getY() {
return y;
}
// 设置左顶点的纵坐标
public void setY(double y) {
this.y = y;
}
// 取得矩形的长度
public double getHeight() {
return height;
}
// 设置矩形的长度
public void setHeight(double height) {
this.height = height;
}
// 取得矩形的宽度
public double getWidth() {
return width;
}
// 设置矩形的宽度
public void setWidth(double width) {
this.width = width;
}
}
/**
* 定义圆类
* @author 郎行天下
*/
class Circle {
// 成员变量
private double x, y, radius;
// 构造方法
Circle() {}
// 取得圆心的横坐标
public double getX() {
return x;
}
// 设置圆心的横坐标
public void setX(double x) {
this.x = x;
}
// 取得圆心的纵坐标
public double getY() {
return y;
}
// 设置圆心的纵坐标
public void setY(double y) {
this.y = y;
}
// 取得圆的半径
public double getRadius() {
return radius;
}
// 设置圆的半径
public void setRadius(double radius) {
this.radius = radius;
}
}
/**
* 定义组合类
* @author 郎行天下
*/
class Geometry {
// 成员变量
private Rectangle rect; //定义一个Rectangle类的对象作为自己的成员变量
private Circle circle; //定义一个Circle类的对象作为自己的成员变量
// 构造方法
Geometry(Rectangle rect, Circle circle) {
this.rect = rect;
this.circle = circle;
}
// 设置矩形的左上角顶点坐标
public void setRectPosition(double x, double y) {
rect.setX(x);
rect.setY(y);
}
// 设置矩形的长和宽
public void setRectHeightAndWidth(double height, double width) {
rect.setHeight(height);
rect.setWidth(width);
}
// 设置圆的圆心坐标
public void setCirclePosition(double x, double y) {
circle.setX(x);
circle.setY(y);
}
// 设置圆的半径
public void setCircleRadius(double radius) {
circle.setRadius(radius);
}
// 显示矩形与圆的位置关系
public void showPosition(Rectangle rect, Circle circle) {
if (rect.getX() - circle.getX() >= circle.getRadius()) {
}
if (circle.getX() - rect.getX() >= rect.getWidth()) {
}
}
}
/**
* 测试主类
* @author 郎行天下
*/
public class MainTest {
public static void main(String[] args) {
Rectangle myRect = new Rectangle();
Circle myCircle = new Circle();
Geometry myGeometry = new Geometry(myRect, myCircle);
// 设置矩形的左上角顶点坐标
myGeometry.setRectPosition(30, 40);
// 设置矩形的长和宽
myGeometry.setRectHeightAndWidth(120, 80);
// 设置圆心坐标
myGeometry.setCirclePosition(150, 30);
// 设置圆半径
myGeometry.setCircleRadius(60);
myGeometry.showPosition(myRect, myCircle);
}
}