装饰具有属性的类以避免重复

时间:2012-07-19 09:22:01

标签: c# design-patterns

我正在尝试找出解决以下问题的最佳方法..

我需要将AvailabilityOption/LimitedAvailabilityOption类型传递给 - 以及服务,然后返回BookingOption类型。

我有生成可用性类型的例程,但我不确定是否需要遍历每个Option个对象,有效地复制从BookingOptionAvailabilityOption继承的版本转。或者我可以使用可用性类别对简单选项进行某种“装饰”,然后在我再次将它们传回时将它们重新投入预订。 我知道有一个装饰模式,但我已经阅读了一下这看起来它更像是在运行时装饰..我可能是误解。 我怀疑我没有解释这个,但这里有一些代码..

编辑有效地选项是预订中许多可能选项的基础 - 例如短途旅行或其他一些额外的选项,其中有很多选项。可用性扩展了以确定任何选项上的空间,但它只是扩展选项本身,价格和可能已在该选项上预订的数字。 BookingOption是从例程中返回的,该例程根据价格和可用性从选项中有效选择。我只是想在预订点返回最低限度,这实际上是需要选项的日期和选项。此时的可用性没有实际意义..

public abstract class Option{
    public int OptionID { get; set; }
    public OptionType OptionType { get; set; }
    public string EqtCode { get; set; }
    public string CentreCode { get; set; }
    public virtual string Description { get; set; }     
}

public abstract BookingOption : Option{
    public DateTime WeekStartDate{get;set;}
}

public abstract class AvailabilityOption : BookingOption {
    public decimal Price{get;set;}

    public override string Description{
        get{return string.format("{0} @ {1}", base.Description, Price.ToString());
        set{ base.Description = value;}
    }
}

public abstract class LimitedAvailabilityOption : AvailabilityOption{
    public int MinNumber { get; set; }
    public int MaxNumber { get; set; }
    public int TotalBooked { get; set; }
    public int TotalRemaining { get; set; }
    public override string Description
    {
        get
        {
            return string.Format("{0} ({1} @ {2})",
                base.Description, TotalRemaining.ToString(), Price.ToString());
        }
        set { base.Description = value;}
    }
}

public class Option1 : Option{
    public Option1(){}
}

public class Option2 : Option{
    public Option2(){}
}

public List<BookingOption> BookWithAvail(List<AvailabiliyOption> options){
//pick options based on avail and pass back the booking versions so write away...
}

1 个答案:

答案 0 :(得分:0)

看起来答案取决于您计划如何使用可用性有限可用性的本质特征。如果这些可用性 - 等式仅适用于LimitedAvailabilityOptionAvailabilityOption类,那么似乎并不需要实现Availability或{{1在单独的类中,因为每个类将仅用于区分一种其他本质(分别为LimitedAvailabilityLimitedAvailabilityOption)。只有当您计划将每个类分配给多个与继承关系无关的本质时,才有意义使用装饰模式并实现可用性有限可用性质量的类(包括通过中间类继承)。如果您打算通过具有可用性属性的共同祖先跨多个类传播 availability -qualities的使用,那么这是唯一的选择将这些可用性质量提取到单独的类中。