• 记录java设计模式中适配器模式和装饰器模式和代理模式的区别


    这三种模式也不是第一次见了,但是看过之后就忘记了,傻傻分不清楚,今天就来好好的理一理其中的区别!

    1.适配器模式

    首先是适配器的模式的解释,将一个类的接口转换成用户期望的另一个接口,适配器模式使得原本不能一起工作的类可以一同工作,说白了就是使得目标接口的方法经过适配之后,可以完成原本不具备的能力。

    网上给出的应用模型大体都是什么转接头啊,type-c转vga接口等等的例子,这种例子虽然非常的形象,但是我本人看到这个例子,很难将这个模式应用到实际的代码中去。后来在学习java io包的源码的时候,意外的看到了这种模式的实际应用,大家可以去看一下io包中的InputStreamReader类,在这个类的编写中就用到了神奇的适配器模式,这个类这里就不再详细说了,官方说这个类是字节流通向字符流的桥梁,其实按照适配器模式中的角色来看,他就是一个适配器,使得InputStream和Reader这两个接口可以一同工作!具体不在展开,这里想说的是,适配器模式和装饰器模式以及代理模式是最容易区分的,因为适配器模式中一般是会有两个接口,目的是让让两个接口协同工作,而装饰器模式和代理模式则是单个接口,从这一点就可以区分了!

    2.装饰器模式和代理模式

    装饰器模式和代理模式在我看来其实真的是非常非常的类似,有时候你混着用都说不出什么问题来!

    装饰器模式是目标类和装饰类都实现了同一个接口,然后装饰器里面持有了目标类的引用,这样就可以对目标类的功能进行扩展了,扩展也是装饰器的核心思想。

    代理模式,在最简单的代理模式中,也是被代理的类和代理类实现了同一个接口,然后代理类持有被代理的类的引用,使用者只能拿到代理类,对被代理类应该是无感的,透明的,这样就可以透过代理类去对目标方法进行把控和辅助,这是他的核心思想。 

    这样说来,两者确实非常相似,但是从实际意义出发,代理,偏重因自己无法完成或自己无需关心,需要他人干涉事件流程,更多的是对对象的控制。
    装饰,偏重对原对象功能的扩展,扩展后的对象仍是是对象本身。

    参考:https://www.jianshu.com/p/c06a686dae39

  • 相关阅读:
    flask基础之jijia2模板使用基础(二)
    python之微信公众号开发(基本配置和校验)
    flask插件系列之SQLAlchemy基础使用
    python基础之常用的高阶函数
    服务器部署之nginx的配置
    python之gunicorn的配置
    python内置模块之unittest测试(五)
    python之celery使用详解一
    git服务器的简单搭建
    python模块分析之logging日志(四)
  • 原文地址:https://www.cnblogs.com/changeCode/p/12503761.html
Copyright © 2020-2023  润新知