在这种情况下我需要一个带有抽象工厂的工厂吗?
Do I need a factory with an abstract factory in this scenario?
抱歉,如果有人已经问过这个问题,但我没有找到与此特定场景有关的问题:
我有一个具有状态和类型的实体。对于每种状态和每种类型,我应该向用户展示一个不同的页面,而这个页面的创建有些复杂,因此它是使用构建器模式创建的。但是,在某些情况下,这些页面可能是相同的。有了一些状态,我不需要检查类型。
一些可能发生的例子:
- 任何类型的状态 1 -> 页“1”
- 类型 A 的状态 2 -> 页面“2A”
- 类型 B 的状态 2 -> 页面“2B”
- 类型 A 的状态 3 -> 页面“3X”
- 类型 B 的状态 3 -> 页面“3X”
- 类型 C 的状态 3 -> 页面“3C”
我想过实现一个工厂(每个状态都有一个 switch case),它将创建和 return 抽象工厂的结果(每个类型都有一个工厂)。但是,我需要一些抽象 类 来解决这些工厂之间的 "same page" 问题。
我真的需要这个复杂的结构吗?
您想根据类型的不同状态显示页面。因此,您的内部页面调用将根据您的上下文而改变。因此,我建议您使用 策略设计模式 .
来实现此行为
根据我对您的问题陈述的理解,以下是 C# 中的代码实现:
public interface ISomeOperation
{
string DisplayPage(int status);
}
public class Type : ISomeOperation
{
public string DisplayPage(int status)
{
if (status == 1)
return "1";
return string.Empty;
}
}
public class TypeA : ISomeOperation
{
public string DisplayPage(int status)
{
if (status == 2)
return "2A";
if (status == 3)
return "3A";
if (status == 4)
return "4A";
return string.Empty;
}
}
public class TypeB: ISomeOperation
{
public string DisplayPage(int status)
{
if (status == 2)
return "2B";
if (status == 3)
return "3B";
if (status == 4)
return "4B";
return string.Empty;
}
}
public class TypeC : ISomeOperation
{
public string DisplayPage(int status)
{
if (status == 2)
return "2C";
if (status == 3)
return "3C";
if (status == 4)
return "4C";
return string.Empty;
}
}
public class OperationContext
{
private readonly ISomeOperation _iSomeOperation;
public OperationContext(ISomeOperation someOperation)
{
_iSomeOperation = someOperation;
}
public string DisplayPageResult(int status)
{
return _iSomeOperation.DisplayPage(status);
}
}
Driver代码:
class Program
{
static void Main(string[] args)
{
var operationContext = new OperationContext(new Type());
operationContext.DisplayPageResult(1);
operationContext = new OperationContext(new TypeB());
operationContext.DisplayPageResult(2);
operationContext.DisplayPageResult(3);
operationContext.DisplayPageResult(4);
operationContext = new OperationContext(new TypeC());
operationContext.DisplayPageResult(2);
operationContext.DisplayPageResult(3);
operationContext.DisplayPageResult(4);
}
}
您的问题陈述要求看起来是 page 的创建,因此 Strategy 可能不适合(它是关于没有状态变化的算法族).如果页面的类型是有限的,static Factory 或 Prototype(以防您需要克隆每个页面实例)会更好(有两个键供选择)。
抱歉,如果有人已经问过这个问题,但我没有找到与此特定场景有关的问题:
我有一个具有状态和类型的实体。对于每种状态和每种类型,我应该向用户展示一个不同的页面,而这个页面的创建有些复杂,因此它是使用构建器模式创建的。但是,在某些情况下,这些页面可能是相同的。有了一些状态,我不需要检查类型。
一些可能发生的例子:
- 任何类型的状态 1 -> 页“1”
- 类型 A 的状态 2 -> 页面“2A”
- 类型 B 的状态 2 -> 页面“2B”
- 类型 A 的状态 3 -> 页面“3X”
- 类型 B 的状态 3 -> 页面“3X”
- 类型 C 的状态 3 -> 页面“3C”
我想过实现一个工厂(每个状态都有一个 switch case),它将创建和 return 抽象工厂的结果(每个类型都有一个工厂)。但是,我需要一些抽象 类 来解决这些工厂之间的 "same page" 问题。
我真的需要这个复杂的结构吗?
您想根据类型的不同状态显示页面。因此,您的内部页面调用将根据您的上下文而改变。因此,我建议您使用 策略设计模式 .
来实现此行为根据我对您的问题陈述的理解,以下是 C# 中的代码实现:
public interface ISomeOperation
{
string DisplayPage(int status);
}
public class Type : ISomeOperation
{
public string DisplayPage(int status)
{
if (status == 1)
return "1";
return string.Empty;
}
}
public class TypeA : ISomeOperation
{
public string DisplayPage(int status)
{
if (status == 2)
return "2A";
if (status == 3)
return "3A";
if (status == 4)
return "4A";
return string.Empty;
}
}
public class TypeB: ISomeOperation
{
public string DisplayPage(int status)
{
if (status == 2)
return "2B";
if (status == 3)
return "3B";
if (status == 4)
return "4B";
return string.Empty;
}
}
public class TypeC : ISomeOperation
{
public string DisplayPage(int status)
{
if (status == 2)
return "2C";
if (status == 3)
return "3C";
if (status == 4)
return "4C";
return string.Empty;
}
}
public class OperationContext
{
private readonly ISomeOperation _iSomeOperation;
public OperationContext(ISomeOperation someOperation)
{
_iSomeOperation = someOperation;
}
public string DisplayPageResult(int status)
{
return _iSomeOperation.DisplayPage(status);
}
}
Driver代码:
class Program
{
static void Main(string[] args)
{
var operationContext = new OperationContext(new Type());
operationContext.DisplayPageResult(1);
operationContext = new OperationContext(new TypeB());
operationContext.DisplayPageResult(2);
operationContext.DisplayPageResult(3);
operationContext.DisplayPageResult(4);
operationContext = new OperationContext(new TypeC());
operationContext.DisplayPageResult(2);
operationContext.DisplayPageResult(3);
operationContext.DisplayPageResult(4);
}
}
您的问题陈述要求看起来是 page 的创建,因此 Strategy 可能不适合(它是关于没有状态变化的算法族).如果页面的类型是有限的,static Factory 或 Prototype(以防您需要克隆每个页面实例)会更好(有两个键供选择)。