某位同学为装饰宿舍墙面,特地购买了一些照片,比如有动物类的小狗,同时也购买了很多样式的相框,对这些照片进行装饰。 为了使照片墙更加的丰富,该同学还购买了风景画,同时该同学发现,可以对同一个照片使用多个相框进行 装饰。使用装饰模式写Java代码
时间: 2024-03-24 19:36:28 浏览: 15
好的,下面是使用装饰模式实现的Java代码:
首先,定义一个抽象类 `Photo`,表示照片:
```
public abstract class Photo {
public abstract void display();
}
```
然后,定义一个具体的照片类 `DogPhoto`,表示小狗照片:
```
public class DogPhoto extends Photo {
@Override
public void display() {
System.out.println("这是一张小狗照片");
}
}
```
接下来,定义一个抽象类 `FrameDecorator`,表示相框装饰器:
```
public abstract class FrameDecorator extends Photo {
protected Photo photo;
public FrameDecorator(Photo photo) {
this.photo = photo;
}
@Override
public void display() {
photo.display();
}
}
```
然后,定义具体的相框装饰器类,比如 `WoodenFrameDecorator` 和 `MetalFrameDecorator`:
```
public class WoodenFrameDecorator extends FrameDecorator {
public WoodenFrameDecorator(Photo photo) {
super(photo);
}
@Override
public void display() {
super.display();
System.out.println("使用木质相框进行装饰");
}
}
public class MetalFrameDecorator extends FrameDecorator {
public MetalFrameDecorator(Photo photo) {
super(photo);
}
@Override
public void display() {
super.display();
System.out.println("使用金属相框进行装饰");
}
}
```
最后,定义一个测试类 `Client`,来测试装饰器模式:
```
public class Client {
public static void main(String[] args) {
// 创建一张小狗照片
Photo dogPhoto = new DogPhoto();
// 使用木质相框进行装饰
Photo woodenFrameDogPhoto = new WoodenFrameDecorator(dogPhoto);
woodenFrameDogPhoto.display();
// 使用金属相框进行装饰
Photo metalFrameDogPhoto = new MetalFrameDecorator(dogPhoto);
metalFrameDogPhoto.display();
// 同时使用木质相框和金属相框进行装饰
Photo woodenAndMetalFrameDogPhoto = new MetalFrameDecorator(new WoodenFrameDecorator(dogPhoto));
woodenAndMetalFrameDogPhoto.display();
}
}
```
输出结果如下:
```
这是一张小狗照片
使用木质相框进行装饰
这是一张小狗照片
使用金属相框进行装饰
这是一张小狗照片
使用木质相框进行装饰
使用金属相框进行装饰
```