装饰者模式的例子

Tec*_*Jay 7 c# design-patterns

我正在浏览Decorator设计模式,看到每个第二个示例都使用了一个抽象装饰器类,并且还实现了要为其创建装饰器的类的接口.我的问题是,

  1. 是否有必要拥有一个抽象装饰器类,然后定义具体的装饰器?

  2. 我创建了一个样本,我认为它可以类似于上面提到的Abstract类方法所实现的功能.

     public interface ICarModel
     {
       Int32 Price { get; }
       Int32 Tax { get; }
     }
    
     public class BaseModel : ICarModel
     {
       public Int32 Price
       {
         get { return 50000; }
       }
    
       public Int32 Tax
       {
         get { return 5000; }
       }
    
       public String GetBaseCarDetails()
       {
         return "Base car model Price is : " + this.Price
           + " and Tax is : " + this.Tax;
       }
     }
    
     public class LuxuryModel
     {
       ICarModel _iCarModel;
    
       public LuxuryModel(ICarModel iCarModel)
       {
         _iCarModel = iCarModel;
       }
    
       public Int32 Price
       {
         get { return _iCarModel.Price + 10000; }
       }
    
       public Int32 Tax
       {
         get { return _iCarModel.Tax + 3000; }
       }
    
       public String GetLuxuryCarDetails()
       {
         return "Luxury car model Price is : " + this.Price
           + " and Tax is : " + this.Tax;
       }
     }
    
    Run Code Online (Sandbox Code Playgroud)

    我们可以说这是装饰模式的一个例子吗?

gia*_*kis 3

更新

我们真的需要将装饰器设置为抽象类吗?

我想你可以避免abstract,但这样你就必须为所有类编写相同的代码。目的abstract是避免冗余代码并确保您的类遵循相同的逻辑。而且它更容易维护和扩展。

装饰模式