任何人都可以幫助我確定在以下代碼段中使用哪種設計模式。它看起來有點像一半戰略模式但泛型。這是一個簡單的示例代碼,並沒有從實際的代碼庫中取得。識別此代碼的設計模式
我之所以說它看起來像一個策略模式,是因爲它似乎正在使用控制器中的泛型轉移行爲邏輯,如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..";
}
}
看起來很像namedropping,特別是「存儲庫」部分。如果有任何設計模式,這裏有一個小工廠方法。版本庫和控制器可以完全忽略! –