2012-03-11 102 views
4

我有一个类,我想扩展功能,以一种方式的装饰器/适配器类,只是我不希望我的扩展类必须知道任何有关它正在扩展的类的种类,而且我不想为每个想要扩展的对象类型编写一个新类。然而,我想要扩展的所有对象都有一个共同的基类,Team。这听起来成熟一个使用泛型的,所以这里是我最初的想法:这是什么设计模式,这是一个好主意吗? (C#)

public class TournamentTeam<T> : T 
    where T : Team 
{ 
    private int mSeed; 

    public TournamentTeam(T team, int seed) 
     : base(team) 
    { 
     /* 
     * error checking stuff here 
     */ 

     // set class variables 
     this.mSeed = seed; 
    } 

    public int Seed 
    { 
     get { return this.mSeed; } 
    } 
} 

这会做我想要的东西,因为现在如果我要访问的T成员,新类有所有的人。基础构造函数将负责设置状态,以便扩展类不需要担心。我也不需要知道为了指向装饰器/外观类型方式中的内部对象而重写什么方法。不用说,这没有编译。所以,我尝试了一些与众不同的东西。好吧,现在如果我想要了解“基类”的功能,我只需要调用团队属性,我很高兴。而且,由于它是通用的,我不必做任何拳击来获得功能。它的作品,它不漂亮,但它的作品。

这是什么模式,如果存在的话,以及这个想法有什么隐患吗?有没有更好的方法来完成这一点?

回答

1

这是我看到的本金和“战略”的格局(如果林不误)

我也很喜欢它执行力度 “在继承青睐组成”应该做什么。

1

不幸的是,C#不允许继承类型参数,因为我认为第一个设计是理想的,因为你想实现。

第二个设计看起来像是适配器模式的合理应用,前提是您确保从Team继承的所有公共TournamentTeam成员都将其调用重定向到封装团队。

就个人而言,如果我在C#来设计这个,我会沟适配器模式有利于平原组成,并做类似如下:

  • 重命名TournamentTeam别的东西......也许TournamentTeamAllocation或TournamentTeamInfo或类似的东西(名字很难!)。基本上,这将会是负责与有关这两个比赛和球队数据处理(即种子)
  • 更改它,使它不继承任何
  • 保持封装,使其仍含有T : Team
相关问题