Jul*_*lio 1 java design-patterns
我正在尝试创建一个服务来处理不同的付款方式。我想实现策略模式。我想要一个具有不同付款方式的枚举。这是我所拥有的一个例子:
public enum Pay {
CREDITCARD(1) {
@Override
public void pay() {
System.out.println("Payment functionality");
}
},
OTHERMETHOD(2) {
@Override
public void pay() {
System.out.println("Payment functionality");
}
};
private int id;
Payment(int id) {
this.id = id;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public abstract void pay();
}
Run Code Online (Sandbox Code Playgroud)
在客户端的某个地方:
user.setPay(Pay.CREDITCARD);
user.pay();
Run Code Online (Sandbox Code Playgroud)
这种方法的问题是“pay”方法可能有很多逻辑,所以我想把它放在不同的类中。我可以定义一个这样的接口:
public interface Pay {
void pay();
}
public class CreditCard implements Pay {
@Override
public void pay() {
}
}
public class OtherMethod implements Pay {
@Override
public void pay() {
}
}
Run Code Online (Sandbox Code Playgroud)
在客户端的某个地方:
if (method.equals("creditcard")) {
user.setPay(new CreditCard());
user.pay();
}
else {
user.setPay(new OtherMethod());
user.pay();
}
Run Code Online (Sandbox Code Playgroud)
但我更喜欢 Enum 的外观以及保持这种方式的原因。谢谢
我不建议在枚举中实现逻辑,因为您可能需要调用外部服务来实现支付,因此您希望能够在支付实现中注入这些依赖项。枚举被静态初始化,它们对注入一点也不友好。将一些逻辑放在枚举中是可以的,虽然它们通常应该在很大程度上保持简单的数据,但是这种情况对于在枚举中处理来说似乎太复杂了。您可以使用枚举来决定付款类型,然后根据需要将每个枚举项映射到付款实现的单例,但逻辑应该与枚举分离。
| 归档时间: |
|
| 查看次数: |
125 次 |
| 最近记录: |