栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

多态对象层次结构的构建器模式:可以在Java中使用吗?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

多态对象层次结构的构建器模式:可以在Java中使用吗?

我想象的解决方案就像是
好奇地重复使用的模板模式

CRTP
。您可以定义一个基类来处理与父相关的初始化,但是您仍然可能会发现两个样板

getParent()
getThis()
方法在每个派生的与子相关的构建器类中重复太多。

看一看:

abstract class Parentbase implements Parent{  @Override  public final Long getParentProperty()  {      return parentProperty_;  }  protected void setParentProperty(Long value)  {      parentProperty_ = value;  }  private Long parentProperty_;}abstract class ParentBuilder<T extends ParentBuilder<T>>{  T withParentProperty(Long value)  {      getParent().setParentProperty(value);      return getThis();  }  protected abstract Parentbase getParent();  protected abstract T getThis();}final class ConcreteChild1 extends Parentbase implements Child1{  @Override  public Integer getChild1Property()  {      return childProperty_;  }  public void setChild1Property(Integer value)  {      childProperty_ = value;  }  private Integer childProperty_;}final class Child1Builder extends ParentBuilder<Child1Builder>{  public Child1Builder()  {     pending_ = new ConcreteChild1();  }  public Child1Builder withChild1Property(Integer value)  {      pending_.setChild1Property(value);      return this;  }  @Override  protected Parentbase getParent()  {      return pending_;  }  @Override  protected Child1Builder getThis()  {      return this;  }  private final ConcreteChild1 pending_;}

如您所见,该

ParentBuilder
类型期望与派生类型配合使用,以允许它返回正确类型的实例。自己的
this
参考不会到期,因为类型
this
之内
ParentBuilder
,当然,
ParentBuilder
而不是,比方说,
Child1Builder
如预期维持“流利”的呼叫链接。

我欠了“

getThis()
帽子戏法”,以安格朗格的入门教程。



转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/453156.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号