Tag: 构建器

Class.newInstance()是否遵循“抽象工厂”设计模式?

我已经开始阅读Joshua Bloch的“Effective Java”(第二版)。 在阅读第2项时( 在面对许多构造函数参数时考虑构建器 ),有一个特定的声明,即作者使用了Class.newInstance()方法。 具体来说,作者说 Java中的传统抽象工厂实现一直是“类”对象,“newInstance”方法扮演“构建”方法的一部分。 这部分让我感到困惑 – 我对抽象工厂设计模式的理解是它用于代表工厂的工厂。 在我看来, Class.newInstance()方法更多地依赖于“静态工厂方法”编码哲学(顺便说一句,这是同一本书中的第1项) 思绪,有人吗? 我一直在努力克服一些艰难的采访,如果我的基本面在出现进行此类采访之前是稳固的话,我会非常感激。 谢谢。

Java与C ++的构建者?

在Google的Protocol Buffer API for Java中,他们使用这些创建对象的很好的构建器(参见此处 ): Person john = Person.newBuilder() .setId(1234) .setName(“John Doe”) .setEmail(“jdoe@example.com”) .addPhone( Person.PhoneNumber.newBuilder() .setNumber(“555-4321”) .setType(Person.PhoneType.HOME)) .build(); 但是相应的C ++ API不使用这样的构建器(参见这里 ) C ++和Java API应该做同样的事情,所以我想知道他们为什么不在C ++中使用构建器。 是否有语言原因,即它不是惯用的,或者在C ++中不受欢迎? 或者可能只是编写C ++版协议缓冲区的人的个人偏好?

使用带有“旧”对象引用的Builder模式创建新对象

我正在使用Builder模式并且遇到如何向新创建的对象添加新的“属性”: public class MsProjectTaskData { private boolean isAlreadyTransfered; private String req; public static class Builder { private boolean isAlreadyTransfered = false; public Builder withTransfered(boolean val) { isAlreadyTransfered = val; return this; } public MsProjectTaskData build() { return new MsProjectTaskData(this); } } private MsProjectTaskData(Builder builder) { isAlreadyTransfered = builder.isAlreadyTransfered; } public MsProjectTaskData(String req) { this.req = […]

Setter AND(不是OR或VS)构建器模式

我有一种情况,我使用构建器模式来构造一个对象。 最好的例子是披萨代码 public class Pizza { private int size; private boolean cheese; private boolean pepperoni; private boolean bacon; public static class Builder { //required private final int size; //optional private boolean cheese = false; private boolean pepperoni = false; private boolean bacon = false; public Builder(int size) { this.size = size; } public Builder cheese(boolean […]

Java Builder模式和“深层”对象层次结构

在“深层”对象层次结构中使用Builder模式的最佳实践是什么? 为了详细说明,我探讨了将Joshua Bloch提出的Builder模式应用于我的XML绑定代码的想法(我使用的是SimpleXML,但这个问题适用于任何情况)。 我的对象层次结构深度为4级,具有不同程度的复杂性。 通过这种方式,我的意思是,在某些级别中,我只有几个属性用于我的对象,而在某些其他级别,我有多达10个属性。 所以请考虑这个假设的例子(为简洁起见,我省略了Simple XML注释) public class Outermost { private String title; private int channel; private List middleList; } class Middle{ private int id; private String name; private boolean senior; /* … … 10 such properties */ private Innermost inner; } class Innermost{ private String something; private int foo; /* … Few more […]

清除对建造者模式的疑虑

我正在学习构建器模式,到目前为止我理解,它是用于初始化的常用模式的一个很好的替代方案: 伸缩构造函数模式 JavaBean模式 问题是,我真的不想从我的域模型中的对象中删除getter和setter。 我总是喜欢把它们当作POJO。 我不喜欢它的原因之一是:如果我不使用POJO,那么在使用ORM框架时注释变量并不容易…… 所以这是我的怀疑: – 是否可以在不使用静态内部类的情况下实现构建器模式? – 如果我必须使用内部类使用构建器模式,你认为保持getter和setter是正确的吗? – 我在练习中做了一个小例子,我试图避开内部类。 你能告诉我你怎么看待它? 产品 public class Product { private String color; private int price; public Product() { } public String getColor() { return color; } public void setColor(String color) { this.color = color; } public int getPrice() { return price; } public void setPrice(int […]

生成器模式与inheritance

我想将Web服务URL请求表示为对象,并发现有许多常见参数可以在inheritance层次结构中“冒泡”。 一个请求可能有很多参数,一些是强制的,另一些是可选的,我相信Bloch的Builder模式是一个很好的选择,用一个流畅的接口模拟命名参数。 具体来说,我正在设计Google Maps Web服务API,它具有一般的Web服务请求 http://maps.googleapis.com/maps/api/service/output?{parameters} service和output是必需参数, sensor是必需参数。 还有一个可选的参数language 。 每个服务都有一组强制和可选参数.Geocode服务有两个可选参数, bounds和region 。 它还具有互斥的强制参数, address或location ,用于指定服务类型(分别为直接或反向地理编码)。 我用新的儿童class来代表这种相互排斥。 我想象类层次结构如下: .—–. | Url | ‘—–‘ ^ | .———. | Request | ‘———‘ ^ |—————————-+————–… .———. .————. | Geocode | | Directions | ‘———‘ ‘————‘ ^ ^ |————+ . .——–. .———. . | Direct | | Reverse | […]

禁用舞台按钮X.

我很快就到了,因为我没有一个非常流利的英语,抱歉。 我正在学习javafx,我想在关闭后单击X的窗口时出现警告。 我知道在窗口中间由我创建的按钮中执行此操作,但我不知道如何控制用户何时按下X以关闭程序。 谢谢

使用Builder模式扩展类

我正在尝试将类a扩展为aX。 所以,我也扩展了aBuilder。 但是,虽然我能够使用以下方法创建类a的对象: aBuilder f = new aBuilder(); f.bi = i; f.bs = s; a atry = f.withI(i).withS(s).build(); 这同样适用于aX。 当我尝试这样做时: aXBuilder fb = new aXBuilder(); aX aXtry = fb.withI(i).withS(s).withB(b).build(); 我收到一个错误(对于a.aBuilder类型,未定义withB(Boolean)方法)。 我是否应该为aX重写所有内容,而不是简单地添加新内容? 我不想这样做,因为这会导致我的代码中出现大量重复。 a和aX类如下: class a { protected String s; protected int i; public void getdata() { System.out.println(this.s); System.out.println(this.i); } protected a(aBuilder fb) { this.s = […]

Java CharAt()和deleteCharAt()性能

我一直想知道java中String / StringBuilder / StringBuffer的charAt函数的实现是什么的复杂性? 那么StringBuffer / StringBuilder中的deleteCharAt()呢?