我有三个运输公司,根据用户选择,我想生成标签。我打算为此实现Factory模式,但是在需要帮助以采取正确的路线时,几乎没有什么混乱。
这里是详细信息
public interface IShipper
{
string GenerateLabel(Address FromAddress, Address ToAddress);
}
public class USPS : IShipper
{
public string GenerateLabel(Address FromAddress, Address ToAddress)
{
//GET USPS LABEL FOR PROVIDED ADDRESSES
}
}
public class UPS : IShipper
{
public string GenerateLabel(Address FromAddress, Address ToAddress)
{
//GET UPS LABEL FOR PROVIDED ADDRESSES
}
}
这里是混乱。我们有第三家船运公司,提供额外的出站选择。客户可以选择是否选择。
public class OutBundShipper
{
public string GenerateLabel(Address FromAddress, Address ToAddress, bool HasOutbound)
{
//GET OutBundShipper LABEL FOR PROVIDED ADDRESSES
}
}
有了这些信息,我想知道什么是更好的方法
作为替代,您只需将其传递给工厂方法:
public IShipper GetShipper(ShipperType type, bool hasOutbound) {
switch (type) {
case USPS:
return new USPS();
....
case Outbound:
return new OutboundShipper(hasOutbound)
}
}
并像以前一样使用工厂方法。
不完全确定这是否是您需要的-我不知道什么是'hasoutbound'可能表示的,并且如果您需要为每个实例化的托运人类打印多个标签,则将无法使用。
或者,不建议将此布尔属性直接添加到方法签名中,建议将其修改为传递给'options'类:
string GenerateLabel(Address FromAddress, Address ToAddress, LabelOptions options);
这意味着,如果您发现其他具有不同参数要求的托运人,则可以对传递的选项类进行修改,而不必更新所有调用点。