今天在面试的时候被问到自己策略模式怎么用的时候有被问懵到,以至于明明是自己的代码在脑海里已经混乱了,而且面试官提出的还是没有更好的利用设计模式也让我思考了一下我之前的代码到底是怎么实现的,重新梳理下策略模式,工厂模式,装饰者模式。

策略模式:

定义:一个类的行为或其算法可以再运行时更改,属于行为型模式。定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。

使用情况:当行为需要区分的时候。

工厂模式:

定义:属于创建型模式,提供了一种创建对象的最佳方式。在创建对象时不会对客户端暴露创建逻辑,并且是通过使用一个共同的接口来指向新创建的对象。让子类去决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。主要解决的是接口选择的问题

使用情况:明确地计划不同条件下创建不同的实例。

装饰者(包装)模式:

  定义:属于结构型设计模式。对客户端透明的方式来动态扩展对象(对扩展开放,对修改关闭),可替代继承。动态给对象添加额外职责。

   构成:

抽象组件(方法规范)

被装饰者(具体实现)

装饰者组件(实例引用)

具体装饰(给构建对象装饰附加的功能)

使用场景:某对象有一个核心功能,现在有一个其衍生对象,扩展了若干功能,但是原对象也有使用场景。

表格化

装饰者模式

工厂模式(抽象)

策略模式

模式结构

结构型设计模式

创建型设计模式

行为型设计模式

关注点

较轻型改动,且在原有对象上新加特性

创建一个对象

封装选择(多态)可互相替换,不会影响到使用算法的客户。

实现方式

方法一层套一层

子类方法重写

子类方法重写

解决的问题

组装相关需求

接口选择

选择不同的方法

优点

  1. 可以拓展对象功能
  2. 灵活性较高
  3. 便于创造多种不同组合方式
  1. 可以应对新需求的拓展
  2. 有助于一致性
  3. 降低耦合
  1. 算法可以自由切换
  2. 避免过多的if-else
  3. 扩展性良好

缺点

对象具有相似性,有可能给查错增加困难

比较死板,一改全改,难以应对全新“产品”

  1. 策略类会增多
  2. 所有策略对外暴露

而我的设计模式的结合使用是先用工厂模式判定相关人员的身份(子类)再用if-else结合枚举选择策略对应类,最后使用装饰者模式去完善对应的新增功能(或者用切面)都行。但是依旧会存在if-else这样比较死板的添加,新想法是通过反射去获取相关策略继承类下的子类,但是感觉有点鸡肋。持续思考中。为啥mybatis源码看起来那么优雅讲道理,是我理解不够。

策略模式、工厂模式、装饰者模式总结解析相关推荐

  1. 米线店结账程序 装饰着模式_设计模式——装饰者模式

    <Head First 设计模式> 学习笔记,码云同步更新中 如有错误或不足之处,请一定指出,谢谢~ 目录 查看其它设计模式笔记,点这里→设计模式笔记汇总 装饰者模式 定义: 动态地将责任 ...

  2. php装饰器模式 简书,装饰器模式/包装器模式

    在电视剧<相爱十年>中,主角肖然把出现了品控问题的安尔雅肥皂换了个包装.改了套说辞变成了全新的品牌浴雪清,并成功的推销出去了,得到了第一桶金.这就说所谓的包装,本质上并没有改变,但是外在表 ...

  3. 装饰者模式 php,php装饰者模式简单应用案例分析

    本文实例讲述了php装饰者模式简单应用.分享给大家供大家参考,具体如下: 装饰模式指的是在不必改变原类文件和使用继承的情况下,动态地扩展一个对象的功能.它是通过创建一个包装对象,也就是装饰来包裹真实的 ...

  4. 【实例学模式】一针见血装饰器模式

    目录 什么是装饰器模式 开发案例[奶茶店自助下单系统] 设计方案 对装饰器模式的思考 什么是装饰器模式 通常给对象添加功能,要么直接修改对象添加相应的功能,要么派生对应的子类来扩展,抑或是使用对象组合 ...

  5. 6中结构型设计模式的对比理解(Composite组合模式,Proxy代理模式,Flyweight享元模式,Facade门面模式,Bridge桥接模式,Decorator装饰器模式)

    结构型模式 结构型模式用来组装 类和对象,以获得更大的结构. 结构型类模式,通过继承机制来组合接口或类.简单的例子就是多重继承,最后一个类拥有所有父类的性质.这个模式有助于独立开发一个协同类.另一个例 ...

  6. 软件设计模式-装饰器模式-工厂模式

    装饰器模式 之前我们说过软件设计模式的一个典型特征就是 使用面向接口而不是继承的编程 但是有种情况是特殊的 例如我们的装饰器模式 之所以需要装饰器模式 是因为需要运行时对某个类进行修饰 由于我们设计模 ...

  7. 设计模式之【装饰者模式】,实现“穿衣打扮”自由原来这么简单

    文章目录 一.什么是装饰者模式 1.装饰者模式原理 2.装饰者模式四大角色 3.代理.桥接.装饰器.适配器 4 种设计模式的区别 4.装饰者模式的应用场景 5.装饰者模式和代理模式的对比 6.装饰者模 ...

  8. 浅析设计模式3 —— 装饰者模式

    推荐语:本文从装饰者模式的核心思想到与其他设计模式的横向对比,从代码示例到业务实战,向读者娓娓呈现装饰者模式的真貌.深入浅出的JDK源码透析,使用场景的利弊权衡,真的值得一阅! --大淘宝技术开发工程 ...

  9. 吃透设计模式第六篇-装饰者模式

    设计模式的重要性对于程序员来说,相当于盾牌对于美国队长,暴风战斧相对于雷神,内裤对于绿巨人(绿巨人最强武器,手动狗头)来说,是必不可少的. 在此,特别总结下23钟设计模式: 创建型模式:单例模式.抽象 ...

  10. Java进阶专题(八) 设计模式之适配器模式、装饰者模式、观察者模式

    本章节将介绍:三个设计模式,适配器模式.装饰者模式和观察者模式.通过学习适配器模式,可以优雅的解决代码功能的兼容问题.另外有重构需求的人群一定需要掌握装饰者模式.本章节参考资料书籍<Spring ...

最新文章

  1. Expression Blend学习动画基础
  2. 提高sqlmap爆破效率
  3. tomcat的部署及session绑定反代
  4. 设计模式C++实现(2)——策略模式
  5. 【TensorFlow官方文档】MNIST机器学习入门
  6. Octave 作图 无响应
  7. python安装成功之后教程_Python安装教程
  8. [C#] readonly vs const
  9. sshpass-Linux命令之非交互SSH密码验证
  10. linux网络子系统分析(三)—— INET连接建立API分析之bind listen
  11. 【板绘必读】完全0基础如何学板绘?
  12. 数据库:园林软件(综合类题库)
  13. 【数据分析】决策树案例详解
  14. Android MP4边下边播
  15. Lua语言编程学习之路01----第五章 函数
  16. 股权模板:72套股权分配方案
  17. 那些年啊,那些事——一个程序员的奋斗史 ——17
  18. Python基础(六):字符串、元组、列表习题
  19. JavaScript实现数字金额小写转大写
  20. photoshop颈纹去除

热门文章

  1. Ubuntu nautilus 快速打开文件浏览器
  2. 关于.length和.length()
  3. Linux终端共享分屏神器tmux
  4. 牛电科技电动车 出行的最佳选择
  5. PowerMill 2018三五轴编程+后处理制作视频教程
  6. 在OpenStack私有云上安装配置虚拟机
  7. 机器学习过程步骤总结
  8. ISP - 没有实现编码/解码功能 - VPU区别
  9. 高效的JS 拼接字符串
  10. 【任务脚本】1103双十一京东淘宝任务脚本,全自动程序,淘宝京东自动做任务,向大神致敬...