gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 11:51:32 24 4
gpt4 key购买 nike

我已经浏览过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 将实现隐藏类的所有方法。

最佳答案

你的方法很好。这里有一些建议:

1 将类成员类型更改为其接口(interface),如“针对接口(interface)编程,而不是实现”原则:

public class VisibleClass {
private IOrder order;
private IReceipt receipt;

2 您真的需要检查 makeOrderprintReceipt 方法中的类类型吗?在 null 检查后创建实例似乎就足够了:

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

order.make();
return this;
}

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

receipt.print();
return this;
}

3 此方法在 VisibleClass 的方法被单个线程调用之前一直有效。如果要将其放入多线程程序中,则应确保 OrderClassReceiptClass 各只有一个实例。您可以通过 3 种方式遵循:

a.在构造函数中创建 OrderClassReceiptClass 实例,并使 VisibleClass 单例。

b.使 OrderClassReceiptClass 单例并删除 new 行。

c.在 makeOrderprintReceipt 方法中创建由 synchronized block 包围的实例。

关于java - 设计模式 - 一个公共(public)类利用许多隐藏类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28786348/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com