你应该这样写:// 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 浏览: 111
这是一个装饰器模式的示例,它可以用于在运行时动态地添加功能或修改对象的行为。在这个示例中,我们创建了一个 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;
这段代码是用于绘制五个圆形的图形。其中,bluecircle代表一个圆,其圆心为复数(-2+0.4i),半径为1;blackcircle代表一个圆,其圆心为复数(-2+0.4i),半径为1;redcircle代表一个圆,其圆心为复数(-2+0.4i),半径为1;yellowcircle代表一个圆,其圆心为复数(-2-0.2i),半径为1;greencircle代表一个圆,其圆心为复数(-1.6+0.2i),半径为1。
通过使用plot函数,可以绘制这五个圆形的图形。其中,'LineWidth'参数用于指定线条的宽度,'k'、'r'、'y'、'g'分别代表黑色、红色、黄色、绿色。
最后的'hold on'用于保持图形窗口打开,使得后续的绘图指令能够在同一个图形窗口中进行绘制。
用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`类充当了装饰器,用于添加红色的边框。
阅读全文