首页 > 其他分享 >杜撰23种设计模式--装饰器模式

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

时间:2023-10-22 23:25:39浏览次数:29  
标签:调用 23 -- flyCar show 装饰 设计模式 runCar

接口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

相关文章

  • 2023.10.19
    1.0版本生成四则运算并存入数据库importjavax.servlet.ServletException;importjavax.servlet.annotation.WebServlet;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importjava.io.IOE......
  • 编程导航算法通关村第 1 关 | 链表
    1.前置知识补充内容引用:https://www.hello-algo.com/数据结构数据结构如同一副稳固而多样的框架。它为数据的有序组织提供了蓝图,使算法得以在此基础上生动起来。分类1.根据逻辑类型分类逻辑结构揭示了数据元素之间的逻辑关系。在数组和链表中,数据按照顺序依次排列,体现......
  • 实验2
    3.c.hpp#include<iostream>#include<cmath>classComplex{public:Complex(doubler=0,doublei=0);Complex(constComplex&c);doubleget_real()const;doubleget_imag()const;voidshow()const;voidadd(const......
  • nc command
    copyfrom https://phoenixnap.com/kb/nc-command#:~:text=The%20Netcat%20(%20nc%20)%20command%20is,using%20either%20TCP%20or%20UDP. IntroductionTheNetcat(nc)commandisacommand-lineutilityforreadingandwritingdatabetweentwocomputernetworks.T......
  • task.2
    task.1#include<stdio.h>#include<stdlib.h>#include<time.h>#defineN5#defineN1374#defineN2465intmain(){intnumber;inti;srand(time(0));//以当前系统时间作为随机种子for(i=0;i<N;++i){number=rand()%(N2-N1+1)+N1;......
  • 实验二 类和对象
    实验任务三1#include<iostream>2#include<cmath>34classComplex{56private:7doublereal;8doubleimag;910public:11Complex(doubler=0,doublei=0){12real=r;13imag=i;14}15......
  • 教你面试就看出公司是否靠谱!
    在⾯试过程中,应聘者可能想要从对公司环境的观察以及对⾯试官的提问当中获取公司相关的信息,以此来判断这家公司靠不靠谱,⾃⼰值不值得去。但这种信息可能会带有⼀定的⽚⾯性,毕竟应聘者没有在公司实际体验过⼯作的内容,很难通过⼀两次⾯试就能看出公司的实际情况。这些细节⼀般只能给......
  • 2023.10.20
    四则运算2.0失败版本server.port=8080spring.datasource.url=jdbc:h2:mem:testedspring.datasource.driverClassName=org.h2.Driverspring.datasource.username=saspring.datasource.password=passwordspring.jpa.hibernate.ddl-auto=updatepackagecom.example.mathquiz;//替换......
  • PAT 甲级【1007 Maximum Subsequence Sum】
    本题是考察动态规划与java的快速输入:max[i]表示第i个结尾的最大的连续子串和。bbegin[i]表示第[begin[i],i]为最大和的开始位置超时代码:importjava.io.BufferedReader;importjava.io.IOException;importjava.io.InputStreamReader;publicclassMain{@Suppres......
  • 分治法
               ......