设计模式-一个利用许多隐藏类的公共类 - java

我已经通过http://www.dofactory.com/net/design-patterns尝试找出最有效的创建设计模式的方法,在该设计模式中,“一个可见类利用许多隐藏类”来创建流畅的API。以下是我目前拥有的代码:

public class VisibleClass {
    Private OrderClass order;
    private ReceiptClass receipt;

    public VisibleClass makeOrder() {
        if (!(order instanceof OrderClass))
            order = new OrderClass();

        order.make();
        return this;
    }

    public VisibleClass printReceipt() {
        if (!(receipt instanceof ReceiptClass))
            receipt = new ReceiptClass();

        receipt.print();
        return this;
    }
}

class OrderClass implements IOrder {
    public void make() {}
}

class ReceiptClass implements IReceipt {
    public void print() {}
}

interface IOrder { void make(); }
interface IReceipt { void print(); }

这是我目前使用API​​的方式:

public static void main(String[] args) {
    VisibleClass x = new VisibleClass();
    x.makeOrder().printReceipt();
}

这是个好方法吗?可以使用更好的方法吗?

*编辑:另外,我应该补充一点,VisibleClass将实现隐藏类的所有方法。

参考方案

一个可见的类利用了许多隐藏的类

不要在商务舱上这样做。流利的语法非常适合配置等,但不适用于简单的业务代码。

原因是该类本身失去了对其状态的控制,这会使它处于不一致的状态(即产生错误的结果)。

甚至还有一个叫做Law of Demeter的原理就可以了。

如果您有业务要求在新订单上打印收据,则应将其作为返回值退回。

var receipt = visibleClass.makeOrder();

至于为实体/业务类使用接口,为什么要这样做?你为什么要抽象那些?通常没有任何其他依赖项或不同类型的实现。

用于业务规则验证的框架/设计模式 - java

Improve this question 我应该对可能具有1000个以上业务规则验证的应用程序使用哪种框架/设计模式?我正在处理的系统类型由许多输入表单组成,允许用户输入。每个输入表单都有不同的部分。即表格A的A / B / C / D部分。表格B的B / C / D部分这些业务规则验证中的某些是两种形式都通用的,我也在寻找一种重用规则的方法。如何建立健壮…

Java:正则表达式模式匹配器是否有大小限制? - java

我的模式类似于OR:“word1 | word2 | word3”我大约有800个字。可能有问题吗? 参考方案 您仅受记忆和理智的限制。 :)

Java:线程池如何将线程映射到可运行对象 - java

试图绕过Java并发问题,并且很难理解线程池,线程以及它们正在执行的可运行“任务”之间的关系。如果我创建一个有10个线程的线程池,那么我是否必须将相同的任务传递给池中的每个线程,或者池化的线程实际上只是与任务无关的“工人无人机”可用于执行任何任务?无论哪种方式,Executor / ExecutorService如何将正确的任务分配给正确的线程? 参考方案 …

Java:我可以在Hashmaps中使用数组吗? - java

我可以在Hashmaps中使用数组吗?如果是这样,则声明这种哈希图的确切语法是什么?谢谢 参考方案 数组也是对象。甚至像int[]这样的原始数组。Map<String,String[]> map = new HashMap<String,String[]>();

JAVA:字节码和二进制有什么区别? - java

java字节代码(已编译的语言,也称为目标代码)与机器代码(当前计算机的本机代码)之间有什么区别?我读过一些书,他们将字节码称为二进制指令,但我不知道为什么。 参考方案 字节码是独立于平台的,在Windows中运行的编译器编译的字节码仍将在linux / unix / mac中运行。机器代码是特定于平台的,如果在Windows x86中编译,则它将仅在Win…