装饰模式的作用是有效的把类的核心职责和装饰功能分开,去除类中重复的装饰逻辑。
例如创建一个数据模型(可能不合理只是用于解释装饰模式)、
import java.util.Map;
//数据模型
public class Model {
//类名
private String name;
//字段属性
private Map<String, Object> fields;
public Model() {
}
public Model(String name, Map<String, Object> fields) {
this.name = name;
this.fields = fields;
}
public void createTable(){
//TODO 根据类名模式名表名属性等构建建表语句
System.out.println("创建"+name);
}
}
//装饰的抽象类
public abstract class DecorateModel extends Model {
protected Model model;
public DecorateModel() {
}
public void decorate(Model model) {
this.model = model;
}
@Override
public void createTable() {
if (model != null) {
model.createTable();
}
}
}
//添加索引
public class IndexModel extends DecorateModel{
public IndexModel() {
}
@Override
public void createTable() {
if (model != null) {
model.createTable();
//TODO 添加索引
System.out.println("添加索引");
}
}
}
//添加约束
public class UniqueModel extends DecorateModel{
public UniqueModel() {
}
@Override
public void createTable() {
if (model != null) {
model.createTable();
//TODO 添加约束
System.out.println("添加约束");
}
}
}
//主类
import java.util.HashMap;
public class Test {
public static void main(String[] args) {
Model model = new Model("菜单表",new HashMap<>());
IndexModel indexModel = new IndexModel();
indexModel.decorate(model);
UniqueModel uniqueModel = new UniqueModel();
uniqueModel.decorate(indexModel);
uniqueModel.createTable();
}
}
/结果/
创建菜单表
添加索引
添加约束