、
接口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()来按照装饰器包装的逻辑顺序执行。
标签:调用,23,--,flyCar,show,装饰,设计模式,runCar From: https://www.cnblogs.com/dwj-ngu/p/17781359.html