当前位置: 首页 > news >正文 自动化设计网站建设网络营销论文题目精选 news 2025/10/31 0:47:02 自动化设计网站建设,网络营销论文题目精选,引流软件下载站,中国招标采购网目录 背景概述概念角色 基本代码分析❀❀花样重难点聚合关系认贼作父和认孙做父客户端的优化及好处继承到设计模式的演变过程 总结 背景 这是我第二次写装饰模式#xff0c;这一次是在上一次的基础上进一步探究装饰模式#xff0c;这一次有了很多新的感受和想法#xff0c;也… 目录 背景概述概念角色 基本代码分析❀❀花样重难点聚合关系认贼作父和认孙做父客户端的优化及好处继承到设计模式的演变过程 总结 背景 这是我第二次写装饰模式这一次是在上一次的基础上进一步探究装饰模式这一次有了很多新的感受和想法也多了很多趣味性的内容读完一定让你觉得写代码原来这么有意思。还是简单介绍一下装饰模式的概念如果想了解更基础更详细的内容可以先读一下我的第一篇装饰模式的博客设计模式之装饰模式–优雅的增强 概述 概念 装饰模式Decorator Pattern是一种结构型设计模式动态地给一个对象添加一些额外的功能就增加功能来说装饰模式比生成子类更为灵活。 这张图今天将反复出现先来对照概念来一一认识一下这上面的每一个类 角色 在装饰模式中通常涉及以下几个重要角色请对照概念和类图 抽象组件Component 抽象组件定义了被装饰对象和装饰对象的共同接口。 具体组件Concrete Component 具体组件是实现了抽象组件接口的类它是装饰的目标对象要增加额外职能的类。 抽象装饰器Decorator 抽象装饰器是一个包含了与抽象组件相同接口的成员变量并从抽象组件继承的类。它的职责是在调用原始对象之前或之后执行额外的操作增加的额外职能的父类。 具体装饰器Concrete Decorator 具体装饰器是实现了抽象装饰器接口的类它包装了具体组件并可以在调用前后执行额外的操作增加的具体的额外职能。 总结一下:这种图昨天的类是要增加额外职能的类右边一坨是要增加的额外职能。 打个比方左边的 具体组件Concrete Component和右边要增加的职能抽象装饰器Decorator本来毫不相干但是现在非要把它们往一起凑非要变成一家人怎么办那就找了一个义父抽象组件Component强硬的变成了一家人同一个义父的子类 基本代码分析 抽象组件(定义的规范子类如何实现的规范) public interface Component {void operation(); }具体组件 public class ConcreteComponent implements Component {Overridepublic void operation() {System.out.println(具体组件的操作);} }抽象装饰器 这是关键类里面一共三部分一个Component 类型的属性一个setComponent方法用来给属性赋值这里使用了多态参数Component component看起来接受的是一个Component 类型的变量但是自始至终接受的只是Component 的子类ConcreteComponent 和孙类ConcreteDecoratorA 和ConcreteDecoratorB用两个词语里形容就是 认贼作父和认孙做父这个放到后面细说。第三部分是重写的父类方法调的是传进来的Component类型的变量的operation方法。 public abstract class Decorator implements Component {protected Component component;public void setComponent(Component component) {this.component component;}Overridepublic void operation() {if (component ! null) {component.operation();}} }具体装饰器A 这两个具体的装饰类继承自Decorator 同时也继承自Component 双层继承这里的重点是operation方法中的super.operation();也就是这个方法让整个装饰的过程按照正确顺序串联起来。 ConcreteDecoratorA 中增加了一个属性也就是给被装饰对象增加的额外职责。 ConcreteDecoratorB中增加了一个方法给给装饰对象增加的额外职责。 这两个类算是从两个维度告诉我们如何给被装饰对象增加额外职责的。 public class ConcreteDecoratorA extends Decorator {private String addedProperty;Overridepublic void operation() {super.operation();addedPropertyNew State;System.out.println(具体装饰器A的操作);}}具体装饰器B public class ConcreteDecoratorB extends Decorator {Overridepublic void operation() {super.operation();addedMethod();}public void addedMethod() {System.out.println(具体装饰器B的操作);} }客户端使用 ConcreteComponent c new ConcreteComponent(); ConcreteDecoratorA d1 new ConcreteDecoratorA(); ConcreteDecoratorB d2 new ConcreteDecoratorB();d1.setComponent(c); d2.setComponent(d1); ConcreteDecoratorB.operation(); 客户端里先实例化了三个对象 第一对象C是要装饰的原有对象。 后面两个对象是具体的装饰对象。 重点来了我来说一下下面代码的执行顺序不要眨眼** d1.setComponent ( c ) 这句代码执行的时候会先到ConcreteDecoratorA 类中没有找到setComponent 方法因此会向它的父类Decorator 中找然后把C对象传递给Decorator 的component属性 同样d2.setComponent(d1)执行的时候会把装饰了C对象的d1对象传递给Decorator 的component属性。这里一定要注意是装饰了C对象的d1对象。 接下来执行ConcreteDecoratorB.operation(); 会先到ConcreteDecoratorB找到operation方法这个方法里的第一句是super.operation(); 是先执行父类Decorator 的operation方法这个方法里先判空然后执行component的operation这个时候要注意这个component是刚刚上面传进来的d1, 此时会d1是ConcreteDecoratorA 类型的那又回到了ConcreteDecoratorA 中执行operation方法接下来和刚才一样执行父类Decorator 的operation方法判空然后执行component的operation这个component是刚刚上面传进来的cc是ConcreteComponent 类型然后执行ConcreteComponent 里面的operation方法打印“具体组件的操作”后面就是一路返回怎么来的怎么回去。 输出结果为 具体组件的操作 具体装饰器A的操作 具体装饰器B的操作❀❀花样重难点 聚合关系 还是这张图 红框框住的两部分被装饰对象和具体装饰对象加起来是Component 儿子和孙子的抽象也就是聚合关系的箭头所指他们加起来聚合到了Decorator 这是形式上的聚合在代码中并没有体现关于这一点还有待探究 那么为什么不是Decorator自聚合呢如果是自聚合只是代表Decorator是具体装饰的容器那么就不能把服饰包装到ConcreteComponent 上了 关于上面的解释在代码中的体现就是Decorator类中的Component 类型的参数 这里引出来我的下一个问题 认贼作父和认孙做父 Component 本来是Decorator的父类但是在代码的实际运行中传的只有ConcreteComponent 和ConcreteDecoratorA 和ConcreteDecoratorB。 ConcreteComponent 相对于Decorator来说是同辈份。认贼作父 ConcreteDecoratorA 和ConcreteDecoratorB都是Decorator的子类。认孙做父 客户端的优化及好处 这三段代码可以看到引用都是子类型的其实完全是可以用父类型去接 先问个问题这三个实例都可以使用Component去接吗 不要被迷惑住了虽然他们都继承自Component但是Component里可是没有setComponent方法的所以只有new ConcreteComponent()可以用Component接。 代码可以改成: Component c new ConcreteComponent(); Decorator d1 new ConcreteDecoratorA(); Decorator d2 new ConcreteDecoratorB();这样写有什么好处呢 多客户端的复用 比如后两句都用Decorator 去接号右边完全可以使用配置文件动态new对象如果把没一句都看成一个按钮背后的逻辑每个按钮都是一个客户端放到页面上就实现了并行。重复的代码就可以使用自动生成。 继承到设计模式的演变过程 最后再说一个我自己的想法仅供参考 还记得开头概念中说过的“就增加功能来说装饰模式比生成子类更为灵活”就先来说说继承如果我们想给一个类增加功能如果不在原有类中增加代码的话可以使用继承的形式增加新的代码那先看下面的图中左边的图这个例子是设计模式书上的给人穿衣服的例子如果不清楚可以参照我的上一篇博客中的代码链接在最上面。 加入TShirt是要给Person增加的功能那么可以使用继承。左边的图。 那么根据封装变化点这是面向对象的精髓现在是增加了一个TShirt我又想增加一个其他的类TShirt2你会怎么做会抽出一个父类遵循依赖倒置原则会让Person和接口Finery产生关系就变成了右边的图 同样的道理现在被装扮类不止一个Person,我也想给Animal装扮。那么就给Person和Animal抽出一个父类Component,遵循依赖倒置原则会让Finery和接口Component产生关系就变成了右边的图。现在看这张图和我开篇放的那张装饰模式的图是不是基本一致了只是缺少了聚合关系。 关于聚合关系在业务实现过程中并没有体现这点以后有机会再研究。 总结 装饰模式算比较难的设计模式了进行了多次学习每次学习都有不一样的收获而且越来越有意思希望今天的文章也能带给你同样的感受。如果你也有有意思的想法和不同意见欢迎指教最后感谢阅读。 文章转载自: http://www.morning.skbkq.cn.gov.cn.skbkq.cn http://www.morning.mkyny.cn.gov.cn.mkyny.cn http://www.morning.yhywr.cn.gov.cn.yhywr.cn http://www.morning.kmqlf.cn.gov.cn.kmqlf.cn http://www.morning.jcfqg.cn.gov.cn.jcfqg.cn http://www.morning.hxmqb.cn.gov.cn.hxmqb.cn http://www.morning.qrpdk.cn.gov.cn.qrpdk.cn http://www.morning.gyylt.cn.gov.cn.gyylt.cn http://www.morning.fqqlq.cn.gov.cn.fqqlq.cn http://www.morning.rnqyy.cn.gov.cn.rnqyy.cn http://www.morning.ldqrd.cn.gov.cn.ldqrd.cn http://www.morning.qgtfl.cn.gov.cn.qgtfl.cn http://www.morning.xpqyf.cn.gov.cn.xpqyf.cn http://www.morning.xlmgq.cn.gov.cn.xlmgq.cn http://www.morning.tsrg.cn.gov.cn.tsrg.cn http://www.morning.rjrnx.cn.gov.cn.rjrnx.cn http://www.morning.qbwmz.cn.gov.cn.qbwmz.cn http://www.morning.zdmlt.cn.gov.cn.zdmlt.cn http://www.morning.hwtb.cn.gov.cn.hwtb.cn http://www.morning.pplxd.cn.gov.cn.pplxd.cn http://www.morning.qkskm.cn.gov.cn.qkskm.cn http://www.morning.gkmwx.cn.gov.cn.gkmwx.cn http://www.morning.nflpk.cn.gov.cn.nflpk.cn http://www.morning.scjtr.cn.gov.cn.scjtr.cn http://www.morning.jfnbh.cn.gov.cn.jfnbh.cn http://www.morning.lzttq.cn.gov.cn.lzttq.cn http://www.morning.ylljn.cn.gov.cn.ylljn.cn http://www.morning.ldcsw.cn.gov.cn.ldcsw.cn http://www.morning.ldsgm.cn.gov.cn.ldsgm.cn http://www.morning.dnbkz.cn.gov.cn.dnbkz.cn http://www.morning.pzcqz.cn.gov.cn.pzcqz.cn http://www.morning.ssjee.cn.gov.cn.ssjee.cn http://www.morning.jybj.cn.gov.cn.jybj.cn http://www.morning.jspnx.cn.gov.cn.jspnx.cn http://www.morning.a3e2r.com.gov.cn.a3e2r.com http://www.morning.grxsc.cn.gov.cn.grxsc.cn http://www.morning.ktqtf.cn.gov.cn.ktqtf.cn http://www.morning.tthmg.cn.gov.cn.tthmg.cn http://www.morning.enjoinfo.cn.gov.cn.enjoinfo.cn http://www.morning.mcfjq.cn.gov.cn.mcfjq.cn http://www.morning.wjplm.cn.gov.cn.wjplm.cn http://www.morning.dighk.com.gov.cn.dighk.com http://www.morning.webife.com.gov.cn.webife.com http://www.morning.bpmfq.cn.gov.cn.bpmfq.cn http://www.morning.jrslj.cn.gov.cn.jrslj.cn http://www.morning.youyouling.cn.gov.cn.youyouling.cn http://www.morning.xlpdm.cn.gov.cn.xlpdm.cn http://www.morning.ztcwp.cn.gov.cn.ztcwp.cn http://www.morning.hnrpk.cn.gov.cn.hnrpk.cn http://www.morning.mdplm.cn.gov.cn.mdplm.cn http://www.morning.skrrq.cn.gov.cn.skrrq.cn http://www.morning.rwfj.cn.gov.cn.rwfj.cn http://www.morning.txqsm.cn.gov.cn.txqsm.cn http://www.morning.pzss.cn.gov.cn.pzss.cn http://www.morning.prxqd.cn.gov.cn.prxqd.cn http://www.morning.smpb.cn.gov.cn.smpb.cn http://www.morning.fktlg.cn.gov.cn.fktlg.cn http://www.morning.yqqxj1.cn.gov.cn.yqqxj1.cn http://www.morning.zkbxx.cn.gov.cn.zkbxx.cn http://www.morning.jgttx.cn.gov.cn.jgttx.cn http://www.morning.rfkyb.cn.gov.cn.rfkyb.cn http://www.morning.yjmlg.cn.gov.cn.yjmlg.cn http://www.morning.httzf.cn.gov.cn.httzf.cn http://www.morning.jjwt.cn.gov.cn.jjwt.cn http://www.morning.knqzd.cn.gov.cn.knqzd.cn http://www.morning.smtrp.cn.gov.cn.smtrp.cn http://www.morning.mqbzk.cn.gov.cn.mqbzk.cn http://www.morning.jltmb.cn.gov.cn.jltmb.cn http://www.morning.mghgl.cn.gov.cn.mghgl.cn http://www.morning.bmssj.cn.gov.cn.bmssj.cn http://www.morning.jjhng.cn.gov.cn.jjhng.cn http://www.morning.zhqfn.cn.gov.cn.zhqfn.cn http://www.morning.mmxnb.cn.gov.cn.mmxnb.cn http://www.morning.trjr.cn.gov.cn.trjr.cn http://www.morning.kxnnh.cn.gov.cn.kxnnh.cn http://www.morning.bmpjp.cn.gov.cn.bmpjp.cn http://www.morning.xxwfq.cn.gov.cn.xxwfq.cn http://www.morning.lpmdy.cn.gov.cn.lpmdy.cn http://www.morning.ydzly.cn.gov.cn.ydzly.cn http://www.morning.lmjkn.cn.gov.cn.lmjkn.cn 查看全文 http://www.tj-hxxt.cn/news/263788.html 相关文章: 营销网站 需求说明泰安网约车 外贸网站是什么意思网页游戏排行榜2012 排版设计的网站打开百度竞价页面是网站是什么 网站建设者属于广告经营者吗商丘网红宋飞 免费化妆品网站模板下载网站代码开发方式 wordpress做视频站好wordpress 微信 主题制作 网站建设合同标的怎么写网站建设费摊销年限 html5个性个人网站wordpress主题开发教材 自己建网站卖东西怎么样手机登陆网页版微信 上饶做网站哪家好国际企业网站建设 云南建设厅网站职称评定品牌网站建设有哪些内容 郑州哪有做网站的免费域名freenom 长春网站设计制作培训什么是网站改版 做汽车团购网站有哪些怎么做网站注册的网页 网站关键词排名提高只用html5做网站 ui个人作品集网站中航建设集团网站 能浏览外国网页的浏览器网站改版后seo该怎么做 企业网站建设模拟实验wordpress 执行sql 网站产品介绍页面的布局方案工作的意义 新干网站新干今年有哪些重大建设衡水安徽网站建设 天津制作个人建站少儿编程加盟哪家好 代做网站修改维护创意设计执行提案 网站建设设计思想淮安市网站建设 哪个行业最喜欢做网站2017年网站开发用什么语言 如何在360网站上做软文推广注册网站做网销 我想创个网站邯郸wap网站建设报价 企业网站建设合同书模板石铜路网站建设 电子商务网站的数据库怎么做深圳网站建设ucreator 搭建网站上传文件seo网站外包 做网站需要多少钱一年大型做网站