杜撰23种设计模式--装饰器模式

接口car,定义共有行为

Component

ConcreteComponent  具体的构件,是每辆车都有的行为。

Decorator

继承与汽车装饰器的两个具体的装饰器:

最终的实现:

 

 如果只有一个ConcreteComponet类而没有抽象的Component类,  Decorator也可以直接继承到ConcreteComponent

 具体的装饰器类,通过带参数的构造器,不断的把参数返回父类进行调用,直至最上层。有一些迭代的韵味在里面。

在这个Main方法中,我们先new一个固定模式的runCar,调用show方法,输出不需要改变的部分。

然后用装饰器对其进行扩展。

首先调用具体装饰器flyCarDcorator,由于构造器调用父类,所以new的runCar。这里的car是runCar。

 然后调用runCar的show方法和当前的fly方法

接下来更复杂一些:

 在这里,我们把flyCarDecorator传给swimCarDecorator

在这里的flyCarDecorator里面已经是用runCar进行构造的,所以这个carDecorator的car是runCar

也就是说,这个swimCar的构建,首先去构建flyCar,flyCar是用runCar构建的。

SwimCar-->flyCar-->RunCar

在他们的show方法中都写了两行

this.getCar().show()

另一行是具体装饰器扩展方法。

 

装饰器模式相当于通过构造方法的super()调用,给每一个具体装饰器都封装上上一层执行逻辑。  然后通过执行方法的this.get.xxx()来按照装饰器包装的逻辑顺序执行。

 

posted @ 2023-10-22 23:07  NobodyHero  阅读(14)  评论(0)    收藏  举报