我有一个名为"XYZClientWrapper"的类,它具有以下结构:
@Builder
XYZClientWrapper{
String name;
String domain;
XYZClient client;
}
Run Code Online (Sandbox Code Playgroud)
我想要的是没有为属性生成的构建函数 XYZClient client
Lombok是否支持此类用例?
我使用ektorp连接到CouchDB.
构建ektorp HttpClient实例的方法是使用构建器模式:
HttpClient httpClient = new StdHttpClient.Builder()
.host("mychouchdbhost")
.port(4455)
.build();
Run Code Online (Sandbox Code Playgroud)
我对Spring比较陌生.请告诉我如何HttpClient在我的上下文中配置一个来创建它Builder.
一种方法是这样做@Configuration.还有其他选择吗?
java spring dependency-injection builder inversion-of-control
据说建造者模式适合比萨实例.
为什么不装饰?将奶酪,意大利辣香肠,培根作为基础披萨上的附加装饰品.
是因为奶酪/意大利辣香肠必须单独建造.我不认为,它们需要单独构建,因为它们可以随时可用.
请澄清一下.我也在寻找装饰模式的一个很好的现实世界的例子,以及为什么它适合那个特定的例子.谢谢.
最近我遇到了Builder设计模式.似乎不同的作者使用"Builder模式"来引用不同的风格,所以让我描述一下我所询问的模式.
我们有一个用于创建产品的算法,即不同类型的对象.在足够高的抽象级别,所有产品类型的算法都是相同的,但每种产品类型都需要对每个算法的抽象步骤进行不同的实现.例如,我们可能有以下蛋糕烘焙算法:
1. Add liquids.
2. Mix well.
3. Add dry ingredients.
4. Mix well.
5. Pour batter into baking pan.
6. Bake.
7. Return baked cake.
Run Code Online (Sandbox Code Playgroud)
不同的蛋糕将需要这些步骤的不同实施,即,使用什么液体/干燥成分,混合的速度,烘烤多长时间等.
模式说是这样做的.对于每个产品,我们创建一个具体的构建器类,其中包含上述每个步骤的实现.所有这些类都派生自一个抽象构建器基类,它本质上是一个接口.因此,例如,我们将有一个抽象基类CakeBaker与纯虚方法AddLiquid(),MixLiquids()等等.具体的蛋糕面包师将是具体的子类,例如,
class ChocolateCakeBaker : public CakeBaker {
public:
virtual void AddLiquids()
{
// Add three eggs and 1 cup of cream
}
virtual void AddDryIngredients()
{
// Add 2 cups flour, 1 cup sugar, 3 tbsp cocoa powder,
// 2 …Run Code Online (Sandbox Code Playgroud) 这似乎是一个问题似乎是一个骗局,但请耐心等待 - 我保证我已经阅读了相关的帖子(以及GOF书).
在我读完所有内容之后,我仍然没有清楚何时使用抽象工厂,工厂方法或构建器.我相信它会在我看到一个问题的简单例子之后陷入困境,这个问题最好由建筑商来处理,而使用抽象工厂显然是愚蠢的.
你能提供一个简单的例子,你可以清楚地使用一种模式而不是其他模式吗?
我理解,如果这个例子过于简单,可能归结为意见问题,但我希望如果有人可以,那个人就是这样.
谢谢.
language-agnostic design-patterns builder factory-method abstract-factory
我正在尝试在新的OS X Snow Leopard机器上安装Rails 3(安装了dev工具),当我sudo gem install rails,我收到以下错误:
ERROR: While executing gem ... (Gem::FormatException)
builder-2.1.2 has an invalid value for @cert_chain
Run Code Online (Sandbox Code Playgroud)
更新失败了.谁看过这个吗?我grep编写了"cert_chain"的builder-2.1.2目录,但找不到任何线索.
Ruby版本是1.8.7
OS X 10.6.6
谢谢!
在我的应用程序中,我必须实例化许多不同类型的对象.每种类型都包含一些字段,需要添加到包含类型中.我怎样才能以优雅的方式做到这一点?
我当前的初始化步骤看起来像这样:
public void testRequest() {
//All these below used classes are generated classes from xsd schema file.
CheckRequest checkRequest = new CheckRequest();
Offers offers = new Offers();
Offer offer = new Offer();
HotelOnly hotelOnly = new HotelOnly();
Hotel hotel = new Hotel();
Hotels hotels = new Hotels();
Touroperator touroperator = new Touroperator();
Provider provider = new Provider();
Rooms rooms = new Rooms();
Room room = new Room();
PersonAssignments personAssignments = new PersonAssignments();
PersonAssignment personAssignment = new PersonAssignment();
Persons persons …Run Code Online (Sandbox Code Playgroud) 我正在尝试为一些构建器类创建一个抽象基类,这样我就可以轻松地在Builder实现之间重用代码.我希望我的构建器支持方法链接,因此方法必须返回最具体类型的"this"实例.我想我可以用泛型来做这件事.不幸的是,如果不使用不安全的操作,我就无法做到这一点.可能吗?
下面是我如何尝试它(以及它如何工作)的示例代码.我想避免在"foo()"中投射到T(导致未经检查的警告),这可以做到吗?
public class Builders
{
public static void main( final String[] args )
{
new TheBuilder().foo().bar().build();
}
}
abstract class AbstractBuilder<T extends AbstractBuilder<?>>
{
public T foo()
{
// set some property
return (T) this;
}
}
class TheBuilder extends AbstractBuilder<TheBuilder>
{
public TheBuilder bar()
{
// set some other property
return this;
}
public Object build()
{
return new Object();
}
}
Run Code Online (Sandbox Code Playgroud) 我已经找到了一个很好的Builder模式示例(在C#中),但找不到一个,因为我不了解Builder模式或者我正在尝试做一些从未打算过的事情.例如,如果我有一个抽象的汽车和抽象的构建方法来创建汽车零件,我应该能够将我所有的30个选择发送给Director,让它构建我需要的部件,然后构建我的汽车.无论生产哪种汽车,卡车,半卡车等,我都应该能够以完全相同的方式"驾驶"它.
第一个问题是大多数示例硬编码属性值到具体部分,我认为应该来自数据库.我认为这个想法是将我的选择发送给Director(来自数据源),并让构建器根据我的数据创建自定义产品.
第二个问题是我希望构建器方法实际创建部件然后将它们分配给产品,而不是传递字符串,而是真正的强类型产品部件.
例如,我想通过为我创建一个Builder制作表单字段来动态创建表单,包括标签,输入部分,验证等.这样我可以从我的ORM中读取对象,检查对象的元数据,将其传递给我的Builder并将新创建的用户控件结果添加到我的Web表单中.
但是,我找到的每个Builder示例都只有硬编码数据,而不是将选择从主代码传递到Builder并开始定制产品.一切似乎都是一个很大的静态案例陈述.例如,如果我有三个参数,每个参数有10个选项,我不想构建30个具体的Builder方法,我想创建的只是足以制作我的产品所需的属性,可能只有三个.
我很想让Director只存在于主代码中.应该有一种方法可以自动确定调用哪个具体的构建器方法,类似于多态和方法重载(尽管这是一个非常糟糕的例子),而不是在模式中使用case语句.(每次我需要添加新的产品类型时,我都需要修改现有的Director,这很糟糕).
我如何在start()下面打电话?
package com.example.test;
class Bar {}
public class Foo<K>
{
final private int count;
final private K key;
Foo(Builder<K> b)
{
this.count = b.count;
this.key = b.key;
}
public static class Builder<K2>
{
int count;
K2 key;
private Builder() {}
static public <K3> Builder<K3> start() { return new Builder<K3>(); }
public Builder<K2> setCount(int count) { this.count = count; return this; }
public Builder<K2> setKey(K2 key) { this.key = key; return this; }
public Foo<K2> build() { return new …Run Code Online (Sandbox Code Playgroud)