任何人都可以帮助我确定以下代码段中使用的设计模式或模式。它看起来不像是一半策略模式,但使用泛型。它只是一个示例代码,并非来自实际的代码库或其他东西。
我之所以说它看起来像一个策略模式,是因为它似乎正在使用诸如DogController<DogRepository>
之类的控制器中的泛型来改变行为逻辑。它可能就像animalController.Repository = new DogRepository()
。
void Main()
{
var animalController = new DogController();
animalController.PrintName();
}
abstract class AnimalControllerBase<TRepository> where TRepository : IAnimalRepository
{
protected abstract TRepository AnimalRepository {get;}
public void PrintName()
{
Console.WriteLine(AnimalRepository.Get());
}
}
class DogController : AnimalControllerBase<DogRepository>
{
protected override DogRepository AnimalRepository
{
get
{
return new DogRepository();
}
}
}
class CatController : AnimalControllerBase<CatRepository>
{
protected override CatRepository AnimalRepository
{
get
{
return new CatRepository();
}
}
}
interface IAnimalRepository
{
string Get();
}
class DogRepository : IAnimalRepository
{
public string Get()
{
return "Hello, I am Steve the dog..";
}
}
class CatRepository : IAnimalRepository
{
public string Get()
{
return "Hello, I am Michael the cat..";
}
}
答案 0 :(得分:1)
我说这是伪装的Factory Method模式。 AnimalControllerBase
定义工厂方法模式的接口,即protected abstract TRepository AnimalRepository {get;}
,每个子类或具体的工厂方法实现提供实际的创建代码:
// disguise of a concrete Factory Method implementation that creates instances of
// DogRepository and every time you call get you get a new instance
class DogController : AnimalControllerBase<DogRepository>
{
protected override DogRepository AnimalRepository
{
get
{
return new DogRepository();
}
}
}
为什么不采取策略? OO结构类似但在概念上非常不同。策略“参数化”行为,而这里有实例创建参数化。实际上,大多数设计模式归结为几个OO结构,例如代理与装饰器完全相同的OO结构,但在概念上它们是非常不同的。