gpt4 book ai didi

design-patterns - builder 设计模式

转载 作者:行者123 更新时间:2023-12-04 06:56:44 25 4
gpt4 key购买 nike

我最近一直在研究设计模式。我正在努力寻找一个可以为该场景实现构建器模式的场景。有没有人有任何例子?

任何答案将不胜感激。

最佳答案

SQLOrm作为一个很好的例子,将构建器模式与一组适当的方法名相结合,使 SQL 的构建感觉就像使用 DSL 一样。

例如

private String getPersonAndmaybePet_JavaStr(boolean personName, boolean isAdult, int[] petTypes) {
StringBuilder sb = new StringBuilder();
// do SELECT
sb.append("SELECT ");
if(personName)
sb.append("person.name,");
if(petTypes != null)
sb.append("pet.*,");

// do FROM
sb.delete(sb.length() - 1, sb.length()); // remove last comma
sb.append(" FROM person,");
if(petTypes != null)
sb.append(" Pet,");

// do WHERE
sb.delete(sb.length() - 1, sb.length()); // remove last comma
sb.append(" WHERE ");
if(isAdult)
sb.append(" person.age >= 18");
else
sb.append(" person.age < 18");

if(petTypes != null) {
StringBuilder commaList = new StringBuilder();
for(int id : petTypes) {
commaList.append(id);
commaList.append(",");
}
commaList.delete(commaList.length() - 1, commaList.length());
sb.append(" AND person.pet_id = pet.id AND pet.pettype IN (" + commaList.toString() + ")");
}
return sb.toString();
}

变成
private String getPersonAndmaybePet(boolean personName, boolean isAdult, int[] petTypes) {
SelectBuilder qry = new SelectBuilder();

if(personName)
qry.select("person.name").from("person");

if(isAdult)
qry.from("person").where().and("person.age >= 18");
else
qry.from("person").where().and("person.age < 18");

if(petTypes != null) {
qry.select("pet.*").from("Pet") //
.where() //
.and("person.pet_id = pet.id") //
.and("pet.pettype IN (#)", QueryBuilderHelper.numbers(petTypes));
}
return qry.toSql();
}

关于design-patterns - builder 设计模式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4416745/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com