`

装饰者模式(Decorator)

阅读更多

 

    每天上班都要跑很远,既要走公路,又要爬山。不过现在我有一辆小车,可以在公路上跑。我还有一个飞行器,可以翻山。嘿,如果我高兴我还可以用飞行器吊着小车跑(当然我的小车重量是可以忽略的,要不我直接用飞行器不就行了吗,之所以这样我想它即是汽车也是飞行器,两者的功能可以同时发挥)。
  看看我的设计吧:

这是装饰者和被装饰这共同的接口(也就是说我,飞行器,小汽车说到底可以看成是同一类东西)

 public abstract class Component
    
{
        
public abstract void Run();
    }

装饰者接口
public abstract class Decorator:Component
    
{
       
public override void Run()
       
{
           Console.WriteLine(
"I'am Decorator ");
       }

    }

飞行器:
 class Aerocraft:Decorator
    
{
        Component comp;
        
public Aerocraft(Component comp)
        
{
            
this.comp = comp;
        }

        
public override void Run()
        
{
            comp.Run();
            Console.WriteLine(
"aerocraft run");
        }

    }

小汽车
class Car:Decorator
    
{
        Component comp;
       
public Car(Component comp)
        
{
            
this.comp = comp;
        }

        
public override void Run()
        
{
            
this.comp.Run();
            Console.WriteLine(
"Car run");
        }

    }

这就是我了。
 class ManA:Component
    
{
        
public override void Run()
        
{
            Console.WriteLine(
this.ToString());
        }

        
    }

客户代码:
 class Program
    
{
        
static void Main(string[] args)
        
{
            Component a 
= new Aerocraft(new Car(new ManA()));//我被汽车包装,汽车被飞行器包装。
            a.Run();

            Console.ReadLine();
        }

    }

运行结果:
Decorator.ManA
Car run
aerocraft run

    注意:ManA 是被装饰者(被包在里面了哦),汽车和飞行器是装饰者。装饰者的作用就是扩展被装饰者(当然还可以是装饰者,上面的Aerocraft就装饰了Car)的能力。本来我不具备汽车跑的能力。也不具备飞行器飞的能力。但是我们都是Component啊。既然是同宗,你能就是我能嘛。而且这种能力能层层借用哦。

Component a = new Aerocraft(new Car(new ManA()));//和下面的这个是一样的

  Component a1 = new ManA();
            a1 
= new Car(a1);
            a1 
= new Aerocraft(a1);
            a1.Run();
真是庄周梦蝶,孰蝶是我,我是孰蝶啊。
我来了也(Component a1 = new ManA();),坐到汽车里面了也(new Car(a1)),变汽车了也(a1 = new Car(a1);)
看飞机来了也,汽车到飞机里去了也,汽车变飞机了也,飞机飞走了也。
分享到:
评论

相关推荐

    装饰者模式——Decorator

    装饰者模式(Decorator)是一种设计模式,用于在运行时动态地给对象添加额外的责任或功能。它是结构型设计模式的一种,能将行为的增加与对象的创建分离,使得我们可以独立地扩展对象的功能。 在Java或其他面向对象...

    设计模式之装饰模式(Decorator Pattern)

    装饰模式(Decorator Pattern)是一种结构型设计模式,它在不改变原有对象的基础上,通过包裹一个对象并为其添加新的行为或责任,实现对对象功能的扩展。这种模式在软件开发中非常常见,尤其当需要在运行时动态改变...

    [结构型模式] head first 设计模式之装饰者模式(decorator)

    装饰者模式(Decorator Pattern)是结构型设计模式之一,它允许在运行时向对象添加新的行为或职责,而无需修改对象的源代码。这个模式的名字来源于装饰艺术,它通过添加额外的装饰来增强一个物体的外观,同样地,...

    装饰者模式(Decorator Pattern)原理图

    装饰者模式(Decorator Pattern)是一种结构型设计模式,它的定义是在不改变原有对象结构的基础上,动态地给该对象增加一些职责(即增加其额外功能)。这种模式允许向一个现有的对象添加新的功能,同时又不改变其...

    Head First 设计模式 (三) 装饰者模式(decorator pattern) C++实现

    装饰者模式(Decorator Pattern)是一种结构型设计模式,它允许我们向对象添加新的行为或职责,而无需修改对象的原始代码。在C++中实现装饰者模式,可以让我们灵活地扩展对象的功能,同时保持代码的可读性和可维护性...

    设计模式--装饰者模式java例子

    装饰者模式是软件设计模式中的一种结构型模式,它的主要目的是动态地给对象添加新的功能,而无需修改原有代码。在Java中,装饰者模式通常通过继承和组合来实现,它提供了一种比继承更灵活的方式来扩展对象的功能。...

    c++-设计模式之装饰模式(Decorator)

    装饰模式(Decorator Pattern)是一种结构型设计模式,允许在不改变对象接口的情况下,动态地为对象添加额外的职责或功能。装饰模式通常用于需要扩展对象功能而又不希望使用子类化的场景。 装饰模式的组成 组件接口...

    设计模式C++学习之装饰模式(Decorator)

    装饰模式(Decorator)是软件设计领域中一种非常实用的结构型设计模式,它允许我们向一个对象添加新的行为或责任,而无需修改该对象的源代码。在C++编程语言中,装饰模式常用于动态地扩展类的功能,使得类的行为在...

    PHP设计模式(八)装饰器模式Decorator实例详解【结构型】

    装饰器模式(Decorator Pattern)是一种结构型设计模式,主要用于在运行时动态地给对象添加新的职责或行为,而不必改变现有对象的类定义。在面向对象编程中,装饰器模式提供了一种相对于继承更加灵活的方式来增强或...

    Decorator装饰者模式

    在装饰者模式中,我们通常有两个主要的角色:Component(组件)和Decorator(装饰器)。Component是被装饰的对象接口,定义了所有装饰器和原始对象共同拥有的行为。Concrete Component是Component的具体实现,是实际...

    设计模式之装饰者(Decorator)

    装饰者模式是软件设计中的一种行为模式,它允许在运行时动态地给对象添加新的行为或职责,而无需改变对象的原始类。这种模式在不违反开闭原则的前提下,提供了扩展对象功能的能力,使得系统更加灵活,易于维护。 在...

    装饰器(Decorator)模式

    装饰器(Decorator)模式 装饰器(Decorator)模式是一种典型的结构型模式,主要用意是动态地为对象添加一些额外的功能。它提供了一个灵活的替代方案来继承子类,以扩展对象的功能。 在《Element of Reusable ...

    C#设计模式之Decorator 装饰模式

    装饰模式(Decorator Pattern)是设计模式中的一种结构型模式,它在不改变原有对象的基础上,通过添加额外的职责来扩展对象的功能。在C#中,装饰模式尤其适用于那些需要动态地增加或减少对象功能的情况,避免了使用...

    装饰者模式Demo

    装饰者模式是面向对象设计模式的一种,主要用于动态地给一个对象添加一些额外的职责,而不会改变该对象的类。这种模式允许我们独立于对象的类来扩展其功能,为对象增加新的行为或属性,同时保持了代码的可读性和可...

    结构型模式之装饰模式(Decorator)

    装饰模式(Decorator)是软件设计模式中的一种结构型模式,其主要目的是在不改变对象原有类的基础上,通过添加新的行为或职责来扩展对象的功能。这种模式使得代码的扩展性非常优秀,避免了由于频繁地使用继承而导致...

    装饰器模式[Decorator]

    装饰器模式(Decorator)是一种设计模式,它允许在运行时向对象添加新的行为或责任,而无需修改对象的源代码。这种模式属于结构型模式,是面向对象设计中的一种非常实用的技术。 装饰器模式的核心思想是通过将一个...

Global site tag (gtag.js) - Google Analytics