杜撰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 @   NobodyHero  阅读(8)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!
历史上的今天:
2022-10-22 近期计划
点击右上角即可分享
微信分享提示