某绘图软件,能绘制线、圆、矩形等简单几何形体。同时也能将这些简单形体组合成更复杂的图形。用组合模式。使用java代码实现并输出
时间: 2023-09-08 11:05:01 浏览: 73
### 回答1:
下面是一个简单的使用组合模式实现绘图软件的示例:
```java
// 抽象图形类
abstract class Shape {
public abstract void draw();
}
// 简单形体类
class Line extends Shape {
public void draw() {
// 绘制直线
System.out.println("绘制直线");
}
}
class Circle extends Shape {
public void draw() {
// 绘制圆形
System.out.println("绘制圆形");
}
}
class Rectangle extends Shape {
public void draw() {
// 绘制矩形
System.out.println("绘制矩形");
}
}
// 复杂图形类,由多个简单形体组成
class ComplexShape extends Shape {
private List<Shape> shapes = new ArrayList<Shape>();
public void add(Shape shape) {
shapes.add(shape);
}
public void remove(Shape shape) {
shapes.remove(shape);
}
public void draw() {
for (Shape shape : shapes) {
shape.draw();
}
}
}
// 使用示例
public class Main {
public static void main(String[] args) {
// 创建简单形体
Shape line = new Line();
Shape circle = new Circle();
Shape rectangle = new Rectangle();
// 创建复杂图形,由多个简单形体组成
ComplexShape complexShape = new ComplexShape();
complexShape.add(line);
complexShape.add(circle);
complexShape.add(rectangle);
// 绘制复杂图形
complexShape.draw();
}
}
```
输出结果为:
```
绘制直线
绘制圆形
绘制矩形
```
### 回答2:
组合模式是一种结构型设计模式,它可以通过将对象组合成树状结构来表示部分-整体的层次结构。在绘图软件中,我们可以使用组合模式来实现对简单几何形体的组合和绘制。
首先,我们需要定义一个抽象基类GeometricShape,其中包含绘制方法和添加子图形、移除子图形等方法。然后,我们分别创建Line、Circle和Rectangle类,它们继承自GeometricShape类并实现相应的方法。
接下来,我们创建一个CompositeShape类,它表示由子图形组成的复杂图形。该类同样继承自GeometricShape类,并包含一个List集合用于存储子图形。在添加、移除子图形等方法中,我们可以通过调用List集合的相应方法来添加、移除子图形。
最后,我们创建一个Client类来测试我们的代码。在Client类中,我们可以创建具体的线、圆、矩形对象,并将它们加入到复杂图形中。然后,我们调用复杂图形的绘制方法来输出结果。
以下是使用Java代码实现的示例:
```java
import java.util.ArrayList;
import java.util.List;
// 抽象基类:几何形体
abstract class GeometricShape {
public abstract void draw();
public abstract void add(GeometricShape shape);
public abstract void remove(GeometricShape shape);
}
// 线类
class Line extends GeometricShape {
@Override
public void draw() {
System.out.println("绘制线");
}
@Override
public void add(GeometricShape shape) {
// 线类无法添加其他子图形,不实现该方法
}
@Override
public void remove(GeometricShape shape) {
// 线类无法移除其他子图形,不实现该方法
}
}
// 圆类
class Circle extends GeometricShape {
@Override
public void draw() {
System.out.println("绘制圆");
}
@Override
public void add(GeometricShape shape) {
// 圆类无法添加其他子图形,不实现该方法
}
@Override
public void remove(GeometricShape shape) {
// 圆类无法移除其他子图形,不实现该方法
}
}
// 矩形类
class Rectangle extends GeometricShape {
@Override
public void draw() {
System.out.println("绘制矩形");
}
@Override
public void add(GeometricShape shape) {
// 矩形类无法添加其他子图形,不实现该方法
}
@Override
public void remove(GeometricShape shape) {
// 矩形类无法移除其他子图形,不实现该方法
}
}
// 复杂图形类
class CompositeShape extends GeometricShape {
private List<GeometricShape> shapes = new ArrayList<>();
@Override
public void draw() {
for (GeometricShape shape : shapes) {
shape.draw();
}
}
@Override
public void add(GeometricShape shape) {
shapes.add(shape);
}
@Override
public void remove(GeometricShape shape) {
shapes.remove(shape);
}
}
// 客户端类
public class Client {
public static void main(String[] args) {
// 创建线、圆、矩形对象
GeometricShape line = new Line();
GeometricShape circle = new Circle();
GeometricShape rectangle = new Rectangle();
// 创建复杂图形,并将线、圆、矩形加入其中
GeometricShape compositeShape = new CompositeShape();
compositeShape.add(line);
compositeShape.add(circle);
compositeShape.add(rectangle);
// 绘制复杂图形
compositeShape.draw();
}
}
```
以上代码可以输出以下结果:
```
绘制线
绘制圆
绘制矩形
```
通过使用组合模式,我们可以将简单的线、圆、矩形等形体组合成更复杂的图形,实现了代码的重用和扩展性的提升。