你应该这样写:// Usage Shape circle = new Circle(); Shape redCircle = new RedShapeDecorator(new Circle()); Shape redRectangle = new RedShapeDecorator(new Circle()); circle.draw(); redCircle.draw(); redRectangle.draw();
时间: 2023-05-21 15:01:46 浏览: 73
这是一个装饰器模式的示例,它可以用于在运行时动态地添加功能或修改对象的行为。在这个示例中,我们创建了一个 Shape 接口和一个 Circle 类来实现它。然后,我们使用 RedShapeDecorator 类来装饰 Circle 对象,以便在绘制时添加红色边框。最后,我们创建了两个装饰后的对象 redCircle 和 redRectangle,并调用它们的 draw() 方法来绘制它们。
相关问题
j=sqrt(-1); x=2;y=0.4; bluecircle=cos(-pi:pi/20:pi)+j*sin(-pi:pi/20:pi)+(j*y-x); blackcircle=cos(-pi:pi/20:pi)+j*sin(-pi:pi/20:pi)+(j*y); redcircle=cos(-pi:pi/20:pi)+j*sin(-pi:pi/20:pi)+(j*y+x); yellowcircle=cos(-pi:pi/20:pi)+j*sin(-pi:pi/20:pi)+(-j*y-x/2); greencircle=cos(-pi:pi/20:pi)+j*sin(-pi:pi/20:pi)+(-j*y+x/2); figure(1) plot(bluecircle,'LineWidth',5);hold on; plot(blackcircle,'k','LineWidth',5);hold on; plot(redcircle,'r','LineWidth',5);hold on; plot(yellowcircle,'y','LineWidth',5);hold on; plot(greencircle,'g','LineWidth',5);hold on;
这段代码是用于绘制五个不同颜色的圆形图形。其中使用了复数来表示圆上的点,通过调整不同的参数来实现位置和颜色的变化。代码中的j=sqrt(-1)是用来定义虚数单位。x和y分别表示圆心的x坐标和y坐标。
bluecircle表示一个蓝色圆形,其圆心为(j*y-x),半径为1,绘制了从-pi到pi的点,并使用plot函数绘制。
类似地,blackcircle、redcircle、yellowcircle和greencircle分别表示黑色、红色、黄色和绿色的圆形,绘制方式与bluecircle相似。
最后,figure(1)用于创建一个新的图形窗口,并使用plot函数将所有的圆形绘制在同一个图形上。
请问还有什么需要帮助的吗?
用Java写一个装饰器模式
装饰器模式是一种常用的设计模式,用于为对象动态添加行为。下面是使用Java语言实现装饰器模式的示例:
首先,我们定义一个接口`Shape`,代表形状对象:
```java
public interface Shape {
void draw();
}
```
然后,我们实现`Rectangle`类和`Circle`类,它们都实现了`Shape`接口,分别表示矩形和圆形:
```java
public class Rectangle implements Shape {
public void draw() {
System.out.println("Shape: Rectangle");
}
}
public class Circle implements Shape {
public void draw() {
System.out.println("Shape: Circle");
}
}
```
接下来,我们定义一个抽象类`ShapeDecorator`,它也实现了`Shape`接口,并包含一个`Shape`对象,用于扩展其行为:
```java
public abstract class ShapeDecorator implements Shape {
protected Shape decoratedShape;
public ShapeDecorator(Shape decoratedShape) {
this.decoratedShape = decoratedShape;
}
public void draw() {
decoratedShape.draw();
}
}
```
最后,我们实现具体的装饰器类,例如`RedShapeDecorator`,它继承了`ShapeDecorator`类,并添加了一个红色的边框:
```java
public class RedShapeDecorator extends ShapeDecorator {
public RedShapeDecorator(Shape decoratedShape) {
super(decoratedShape);
}
public void draw() {
decoratedShape.draw();
setRedBorder(decoratedShape);
}
private void setRedBorder(Shape decoratedShape) {
System.out.println("Border Color: Red");
}
}
```
最后,我们可以创建一个客户端程序来测试装饰器模式:
```java
public class DecoratorPatternDemo {
public static void main(String[] args) {
Shape circle = new Circle();
Shape redCircle = new RedShapeDecorator(new Circle());
Shape redRectangle = new RedShapeDecorator(new Rectangle());
System.out.println("Circle with normal border");
circle.draw();
System.out.println("\nCircle of red border");
redCircle.draw();
System.out.println("\nRectangle of red border");
redRectangle.draw();
}
}
```
输出结果如下:
```
Circle with normal border
Shape: Circle
Circle of red border
Shape: Circle
Border Color: Red
Rectangle of red border
Shape: Rectangle
Border Color: Red
```
通过使用装饰器模式,我们可以在不改变原有代码的情况下,动态地为对象添加行为。在上述示例中,`RedShapeDecorator`类充当了装饰器,用于添加红色的边框。