相关疑难解决方法(0)

有效Java中的生成器模式

我最近开始阅读Joshua Bloch撰写的Effective Java.我发现Builder模式的概念[书中的第2项]非常有趣.我试图在我的项目中实现它,但有编译错误.以下是我试图做的事情:

具有多个属性及其构建器类的类:

public class NutritionalFacts {
    private int sodium;
    private int fat;
    private int carbo;

    public class Builder {
        private int sodium;
        private int fat;
        private int carbo;

        public Builder(int s) {
            this.sodium = s;
        }

        public Builder fat(int f) {
            this.fat = f;
            return this;
        }

        public Builder carbo(int c) {
            this.carbo = c;
            return this;
        }

        public NutritionalFacts build() {
            return new NutritionalFacts(this);
        }
    }

    private NutritionalFacts(Builder b) {
        this.sodium = b.sodium;
        this.fat = b.fat;
        this.carbo …
Run Code Online (Sandbox Code Playgroud)

java design-patterns builder-pattern

136
推荐指数
6
解决办法
11万
查看次数

流畅的界面和Builder模式之间有什么区别?

我很擅长设计模式,并且在流畅的界面和Builder模式之间存在差异.

我理解流畅的接口的概念.但是构建器模式有点令人困惑.我无法理解在Builder模式中使用Director.

我可以一起使用Builder模式和Fluent Interface吗?如果是这样,那么我应该如何与导演和具体建筑师一起这样做?

我的问题不是关于构建器模式的优点.但这个问题的目的是了解构建器模式和流畅界面之间的关系.


使用GoF的Builder的UML序列图进行编辑:

与导演的序列图

java oop design-patterns

46
推荐指数
2
解决办法
4万
查看次数

流畅的接口 - 方法链接

方法链接是我知道构建流畅接口的唯一方法.

这是C#中的一个例子:

John john = new JohnBuilder()
    .AddSmartCode("c#")
    .WithfluentInterface("Please")
    .ButHow("Dunno");

Assert.IsNotNull(john);

  [Test]
    public void Should_Assign_Due_Date_With_7DayTermsVia_Invoice_Builder()
    {
        DateTime now = DateTime.Now;

        IInvoice invoice = new InvoiceBuilder()
            .IssuedOn(now)
            .WithInvoiceNumber(40)
            .WithPaymentTerms(PaymentTerms.SevenDays)
            .Generate();

        Assert.IsTrue(invoice.DateDue == now.AddDays(7));
    }
Run Code Online (Sandbox Code Playgroud)

那么其他人如何创建流畅的界面.你是如何创造它的?需要什么语言/平台/技术?

language-agnostic oop design-patterns fluent-interface

34
推荐指数
4
解决办法
1万
查看次数

方法链的优点和缺点以及由对象本身替换所有void返回参数的可能性

我最感兴趣的是Java,但我认为这是一个普遍的问题.最近我一直在使用Arquillian framework(ShrinkWrap),它使用了很多方法链接.方法链接的其他实例是在方法StringBuilder,StringBuffer.使用这种方法有明显的好处:减少详细程度就是其中之一.

现在我想知道,为什么并非所有将void返回参数实现为可链接的方法?链接必然存在一些明显和客观的缺点.因为如果所有方法都是可链接的,我仍然可以选择不使用它.

我不是要求改变Java中的现有代码,这可能会破坏某些地方的某些东西,但解释为什么不使用它也会很好.我更多地要求从未来的框架(用Java编写)设计视角.


我发现了一个类似的问题,但原来的提问者实际上想知道为什么它被认为是一种好的做法:方法链 - 为什么这是一个好的做法,或不是?


虽然有一些答案可用,但我仍然不确定链接的所有优点和缺点是什么,以及将所有void方法链接起来是否有用会被认为是有用的.

java design-patterns chaining

22
推荐指数
4
解决办法
1万
查看次数

Java bean的setter许可是否会返回?

我可以定义setter方法来返回它而不是void吗?

喜欢:

ClassA setItem1() {
      return this;
}

ClassA setItem2() {
      return this;
}
Run Code Online (Sandbox Code Playgroud)

然后我可以使用新的ClassA().setItem1().setItem2()

java design-patterns

14
推荐指数
4
解决办法
6123
查看次数