Spiga

一天一个重构方法(34):提炼接口

2009-09-22 23:17:08

Extract Interface:提炼接口

如果你发现多于一个类使用另外一个类的某些方法,引入接口解除这种依赖往往十分有用。该重构实现起来非常简单,并且能够享受到松耦合带来的好处。

public class ClassRegistration
{
	public void Create()
	{
		// create registration code
	}
	public void Transfer()
	{
		// class transfer code
	}
	public decimal Total { get; private set; }
}
public class RegistrationProcessor
{
	public decimal ProcessRegistration(ClassRegistration registration)
	{
		registration.Create();
		return registration.Total;
	}
}

在下面的代码中,你可以看到我提取出了消费者所使用的两个方法,并将其置于一个接口中。现在消费者不必关心和了解实现了这些方法的类。我们解除了消费者与实际实现之间的耦合,使其只依赖于我们创建的契约。

public interface IClassRegistration
{
	void Create();
	decimal Total { get; }
}
public class ClassRegistration : IClassRegistration
{
	public void Create()
	{
		// create registration code
	}
	public void Transfer()
	{
		// class transfer code
	}
	public decimal Total { get; private set; }
}
public class RegistrationProcessor
{
	public decimal ProcessRegistration(IClassRegistration registration)
	{
		registration.Create();
		return registration.Total;
	}
}