Era*_*aka 0 design-patterns factory-pattern
在下面的场景中,对象需要根据某些条件逻辑进行实例化,工厂方法模式是否有助于避免客户端代码由于if/elseif条件的数量而变得混乱(如果越来越多,这也将是一个维护噩梦由于逻辑的不同变化,需要创建产品.
或者是否有任何其他设计模式可以拯救?
public interface IProduct
{
void Method1();
}
public class ProductA : IProduct
{
void Method1()
{
}
}
public class ProductB : IProduct
{
void Method1()
{
}
}
public class ProductC : IProduct
{
void Method1()
{
}
}
public class Client
{
public void Test()
{
int count = 5;
IProduct product;
if (count < 10)
{
product = new ProductA();
}
else if (count == 10)
{
product = new ProductB();
}
else if (count > 10)
{
product = new ProductC();
}
product.Method1();
}
}
Run Code Online (Sandbox Code Playgroud)
看起来工厂模式正是您想要的:
public class ProductFactory
{
public IProduct GetProduct(int count)
{
if (count < 10)
{
return new ProductA();
}
else if (count == 10)
{
return new ProductB();
}
else if (count > 10)
{
return new ProductC();
}
}
}
Run Code Online (Sandbox Code Playgroud)
然后,无论您的客户端代码需要一个实例,它都可以去
public class Client
{
public void Test()
{
ProductFactory factory = new ProductFactory();
IProduct product = factory.GetProduct(5);
product.Method1();
}
}
Run Code Online (Sandbox Code Playgroud)