小编前一阵写了这俩业务代码:
1.java20 通过gdal3.6.4,geotools实现遥感影像分类,坐标转换,输出
影像分类是数据下载,数据裁剪,数据分类,tif转shp,输出;
计算植被指数是,数据下载,数据裁剪,计算植被指数,tif转shp,输出;
我发现和分类前面的步骤都是包含数据下载,数据裁剪;
最先开始小编就是代码逻辑是顺序输出,if else 目前虽然不是很多,那如果写计算植被指数也是这样的顺序,就会导致这个代码很长,逻辑都放在了一起,很多重复,修改代码也不清晰,如果出现改动,比如如果先分类,再裁剪,或者先转shp等等,就会很麻烦。
这是我改造后的代码,用了装饰器模式调用的时候,就比较容易 ,而且很方便修改前后调用的顺序。 (抽象装饰器角色被我省略掉了)
/**
* 应用模块名称: 影像处理抽象类
* 抽象构件角色
*/
public abstract class AbstractImageHandler {
public abstract Result handler(ImageInformationDTO infomationDTO) throws Exception;
}
/**
* 应用模块名称: 具体构建角色
*/
public class ImageHandlerImpl extends AbstractImageHandler {
public AbstractImageHandler imageHandler;
private Result result = new Result();
public ImageHandlerImpl() {
}
public ImageHandlerImpl(AbstractImageHandler imageHandler) {
this.imageHandler = imageHandler;
}
@Override
public Result handler(ImageInformationDTO infomationDTO) throws Exception {
return result;
}
}
/**
* 应用模块名称: 具体装饰角色
*/
public class ImageCutHandler extends ImageHandlerImpl {
public ImageCutHandler(AbstractImageHandler imageHandler) {
super(imageHandler);
}
public ImageCutHandler() {
}
@Override
public Result handler(ImageInformationDTO infomationDTO) throws Exception {
Result result = new Result();
// imageCut(infomationDTO);//影像裁剪的逻辑
if (this.imageHandler != null) {
result = this.imageHandler.handler(imageClassInfoDTO);
}
return result;
}
}
于是我借鉴了设计模式中的装饰器模式,调用就变成了以下这样,