装饰着模式一般在不修改原功能基础上去添加新的功能
例如当美颜相机需要在原生相机的基础上添加一个美颜效果,但是不想去修改原生相机的功能
然后在美颜效果的基础上再添加一个滤镜效果,不修改美颜效果,如下图所示
示例代码
/**
* 拍照功能
*/
interface IPicture{
void takePicture();
}
/**
* 原生相机
*/
class Phone implements IPicture{
@Override
public void takePicture() {
System.out.println("照相");
}
}
/**
* 添加美颜效果
*/
class BeautyPhone implements IPicture{
IPicture iPicture;
public BeautyPhone(IPicture iPicture) {
this.iPicture = iPicture;
}
@Override
public void takePicture() {
iPicture.takePicture();
System.out.println("添加美颜效果");
}
}
/**
* 添加滤镜效果
*/
class FilterPhone implements IPicture{
IPicture iPicture;
public FilterPhone(IPicture iPicture) {
this.iPicture = iPicture;
}
@Override
public void takePicture() {
iPicture.takePicture();
System.out.println("添加滤镜效果");
}
}
测试
public static void main(String[] args) {
Phone phone = new Phone();
//添加滤镜效果
IPicture picture = new FilterPhone(phone) ;
picture.takePicture();
}
输出:
照相
添加滤镜效果
public static void main(String[] args) {
Phone phone = new Phone();
//添加美颜效果
IPicture picture = new BeautyPhone(phone) ;
picture.takePicture();
}
输出:
照相
添加美颜效果
public static void main(String[] args) {
Phone phone = new Phone();
//先在原相机基础上添加美颜效果 再在美颜相机基础上添加滤镜效果
IPicture picture = new FilterPhone(new BeautyPhone(phone)) ;
picture.takePicture();
}
照相
输出:
添加美颜效果
添加滤镜效果