工厂设计模式是一种创建型设计模式,它提供了一种在不指定具体类的情况下创建对象的机制。紧耦合的工厂设计模式意味着工厂类与被创建的对象类之间有很强的依赖关系。
工厂设计模式主要有三种类型:
当需要创建的对象较多,且创建逻辑复杂时,可以使用工厂模式。例如,创建不同类型的日志记录器、数据库连接等。
假设我们有一个简单的工厂类 ProductFactory
,它根据传入的参数创建不同的产品对象。
// 产品接口
public interface IProduct
{
void Use();
}
// 具体产品A
public class ConcreteProductA : IProduct
{
public void Use()
{
Console.WriteLine("Using ConcreteProductA");
}
}
// 具体产品B
public class ConcreteProductB : IProduct
{
public void Use()
{
Console.WriteLine("Using ConcreteProductB");
}
}
// 工厂类
public class ProductFactory
{
public IProduct CreateProduct(string type)
{
switch (type)
{
case "A":
return new ConcreteProductA();
case "B":
return new ConcreteProductB();
default:
throw new ArgumentException("Invalid product type");
}
}
}
using Xunit;
public class ProductFactoryTests
{
[Fact]
public void CreateProduct_ShouldReturnConcreteProductA_WhenTypeIsA()
{
// Arrange
var factory = new ProductFactory();
// Act
var product = factory.CreateProduct("A");
// Assert
Assert.IsType<ConcreteProductA>(product);
((ConcreteProductA)product).Use();
}
[Fact]
public void CreateProduct_ShouldReturnConcreteProductB_WhenTypeIsB()
{
// Arrange
var factory = new ProductFactory();
// Act
var product = factory.CreateProduct("B");
// Assert
Assert.IsType<ConcreteProductB>(product);
((ConcreteProductB)product).Use();
}
[Fact]
public void CreateProduct_ShouldThrowArgumentException_WhenTypeIsInvalid()
{
// Arrange
var factory = new ProductFactory();
// Act & Assert
Assert.Throws<ArgumentException>(() => factory.CreateProduct("C"));
}
}
如果工厂类与产品类之间耦合度过高,可以考虑以下方法来解耦:
通过以上方法,可以有效地编写紧耦合工厂设计模式的Xunit测试用例,并通过解耦提高代码的可维护性和可测试性。
领取专属 10元无门槛券
手把手带您无忧上云