首页 > 其他分享 >关于几个结构型模式的讨论

关于几个结构型模式的讨论

时间:2023-07-06 17:11:28浏览次数:28  
标签:讨论 服务 对象 适配器 模式 source 装饰 结构型

结构型模式的思路是组合,而根据组合侧重的不同方面,分为了不同的模式。

  • 结构型模式的思路和行为型模式中的模板方法模式有一定相似性,尤其是在实现具体的函数时,不过不同之处在于模板方法模式采用的是继承,并且它们的目的也不一样,结构型模式的目的是扩展、增减功能,而模板方法模式的目的是泛化通用流程。

  • 代理模式组合了一个提供具体功能的对象,然后为其它对象提供相同的接口;可以通过代理模式进行缓存、记录log、访问限制等操作,但主要的功能还是由其内部持有的提供服务的对象提供的。

  • 由于代理对象和服务对象遵循相同的接口,因此它们可以互换。

  • 相比之下装饰器对象尽管和源服务对象拥有相同的接口,但它们无法互换使用,原因在于装饰器对象依赖源对象来提供服务,装饰器对象本身能够增强服务功能,但并没有真正实现服务功能,它是依赖于服务对象来实现功能的;这导致装饰器模式受声明顺序的影响。

  • 装饰器模式像是个单链表。

  • 可以声明多个装饰器类并动态配置装饰器对象。

  • 适配器模式与代理模式和装饰器模式相比仍然依赖已有服务对象来提供功能,但不同的是,适配器对象使用已有服务来提供新的功能而不是实现与现有服务对象相同的接口。适配器模式一般用于实现需要用到遗留系统的功能的新的需求。

  • 门面模式也提供新的功能,与适配器不同的是:适配器通常只封装一个服务对象, 而门面对象作用的范围更广,通常会作用于整个对象子系统上。

代理模式

image

装饰模式

class Application is
    method dumbUsageExample() is
        source = new FileDataSource("somefile.dat")
        source.writeData(salaryRecords)
        // 已将明码数据写入目标文件。

        source = new CompressionDecorator(source)
        source.writeData(salaryRecords)
        // 已将压缩数据写入目标文件。

        source = new EncryptionDecorator(source)
        // 源变量中现在包含:
        // Encryption > Compression > FileDataSource
        source.writeData(salaryRecords)
    // 已将压缩且加密的数据写入目标文件。

image

适配器模式

image

比如,已有服务能够处理某种格式的数据,而新的业务要求使用另外一种格式,此时就可以创建适配器类来对数据格式进行转换,使得仍然能够复用已有服务来处理新需求。

门面(外观)模式

image

引用

  1. refactoringguru.cn/design-patterns

标签:讨论,服务,对象,适配器,模式,source,装饰,结构型
From: https://www.cnblogs.com/bblitz/p/17532716.html

相关文章

  • JAVA设计模式之原型模式
    设计模式设计模式(DesignPattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路。它不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案。总体来说设计模式分为三大类:创建型模式,共五种:工厂方法模式、抽象工厂模式、单例模式、......
  • AI数字人(虚拟人)讨论总结
    AI数字人类型和应用场景?1.二维/三维虚拟人:用于游戏、IP品牌(柳夜熙)、内容创作(http://AI.talk)等。2.真人形象数字人:用于直播卖货,营销/投流广告视频录制(Heygen)、语言学习(CallAnnie)等等。AI数字人的价值是什么?1.代替人说话,提升表达效率和营销效率。比如真人做不到24小时直播,但......
  • 淘宝技术三面题目:分布式架构+红黑树+SpringMVC+设计模式
     淘宝一面Java容器有哪些?哪些是同步容器,哪些是并发容器?ArrayList和LinkedList的插入和访问的时间复杂度?java反射原理,注解原理?新生代分为几个区?使用什么算法进行垃圾回收?为什么使用这个算法?HashMap在什么情况下会扩容,或者有哪些操作会导致扩容?HashMappush方法的执行过......
  • Day14-设计模式之迭代器模式
    设计模式之迭代器模式一、概念定义:提供一种遍历集合元素的统一接口,用一致的方法遍历集合元素,不需要知道集合对象的底层表示,即:不暴露其内部的结构意图:如果我们的集合元素是用不同方式实现的,有数组、集合或者其他方式。当客户端要遍历这些集合元素的时候就要使用多种遍历方式,而......
  • Day13-设计模式之访问者模式
    设计模式之访问者模式一、概念定义:封装一些作用于某种数据结构中的各元素的操作,它可以在不改变这个数据结构的前提下定义作用于这些元素的新的操作。模式动机:对于存储在一个集合中的对象,他们可能具有不同的类型(即使有一个公共的接口),对于该集合中的对象,可以接受一类称为访问......
  • Day10-设计模式之外观模式
    设计模式之外观模式一、引例当我们现在想要在家通过投影仪看电影,其过程包括关灯,关闭窗帘,打开投影仪,这些家居都是独立的,就会有灯光开关、窗帘开关、投影仪开关。我们需要一步一步的去打开这些开关。如果用代码来实现,就可将灯光,窗帘等都看成一个对象,然后用Client端依次去调用这些......
  • Day11-设计模式之享元模式
    设计模式之享元模式一、意图在面向对象系统的设计和实现中,创建对象是最为常见的操作。这里面就有一个问题:如果一个应用程序使用了太多的对象,就会造成很大的存储开销。特别是对于大量轻量级(细粒度)的对象,比如在文档编辑器的设计过程中,我们如果为每个字母创建一个对象的话,系统可......
  • Day13-设计模式之命令模式
    设计模式之命令模式一、引例我们买了一套智能家电,有照明灯、风扇、冰箱、洗衣机,我们只要在手机上安装app就可以控制对这些家电工作。这些智能家电来自不同的厂家,我们不想对每一种家电都安装一个App,分别控制,我们希望只要一个app就可以控制全部智能家电。要实现一个app控制所......
  • Day12-设计模式之备忘录模式
    设计模式之备忘录模式一、引例案例引入游戏角色状态恢复问题游戏角色有攻击力和防御力,在大战Boss前保存自身的状态(攻击力和防御力),当大战Boss后攻击力和防御力下降,从备忘录对象恢复到大战前的状态。传统的设计方案传统的方式的问题分析一个对象,就对应一个保存对象状态......
  • M0休眠模式
    一、特点两种休眠模式:普通休眠和深度休眠进入休眠的休眠方法:WFI、WFE、利用退出休眠特性降低休眠时功耗的方法:停止部分或所有时钟信号降低MCU某部分时钟频率降低MCU各部分电压关掉MCU某部分电源二、普通休眠和深度休眠模式进人普通休眠模式还是深度休眠模式,是......