杜撰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()来按照装饰器包装的逻辑顺序执行。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 一起来玩mcp_server_sqlite,让AI帮你做增删改查!!
· 零经验选手,Compose 一天开发一款小游戏!
2022-10-22 近期计划