精华内容
下载资源
问答
  • 装饰器是动态的添加方法,装饰者被装饰者具有层次关系,但是对使用者是无感的,相当于是同一个接口; 适配者是把一个接口变为另一个接口,已达成适配效果,适配者被适配者没有层次关系,对开发者无感的。 ...
    装饰器是动态的添加方法,装饰者和被装饰者具有层次关系,但是对使用者是无感的,相当于是同一个接口;
    适配者是把一个接口变为另一个接口,已达成适配效果,适配者和被适配者没有层次关系,对开发者无感的。
    
    展开全文
  • 装饰器和适配器模式

    2020-12-08 11:28:30
    适配器模式与装饰器模式的区别 装饰器适配器都有一个别名叫做 包装模式(Wrapper),它们看似都是起到包装一个类或对象的作用,但是使用它们的目的很不一一样。适配器模式的意义是要将一个接口转变成另一个接口,它...

    适配器模式与装饰器模式的区别

    装饰器与适配器都有一个别名叫做 包装模式(Wrapper),它们看似都是起到包装一个类或对象的作用,但是使用它们的目的很不一一样。适配器模式的意义是要将一个接口转变成另一个接口,它的目的是通过改变接口来达到重复使用的目的。
    而装饰器模式不是要改变被装饰对象的接口,而是恰恰要保持原有的接口,但是增强原有对象的功能,或者改变原有对象的处理方式而提升性能。所以这两个模式设计的目的是不同的。

    展开全文
  • 装饰器模式 顾名思义,就是对已经存在的...他与代理模式的区别就是装饰器模式是is-a关系,而代理模式不一定是。例子这里就不举了 适配器模式 适配器就是一种适配中间件,它存在于不匹配的二者之间,用于连接二...

    装饰器模式

            顾名思义,就是对已经存在的某些类进行装饰,以此来扩展一些功能。通常需要被一些类的功能做扩展的时候用到。装饰内持有被装饰类的实例,并且实现同一个接口。

    装饰类通过构造器声明装饰对象。

    他与代理模式的区别就是装饰器模式是is-a关系,而代理模式不一定是。例子这里就不举了

    适配器模式

            适配器就是一种适配中间件,它存在于不匹配的二者之间,用于连接二者,将不匹配变得匹配,类似于插头转换器,港版的手机充电需要通过转换接头将220v的电压转换成能用的电压。

            适配器分为三种:类适配器、对象适配器、接口适配器

    类适配器模式:

      原理:通过继承来实现适配器功能。

    public interface electricSourceB{
    
            create220V();
    }
    
    public interface electricSource{
    
            create36v();
    }
    
    public class VPower implements electricSource{
    
        @Override
        public void create36v() {
            System.out.println("生产36V电压");
        }
    
    }
    
     public class Adapter extends VPower implements electricSourceB{
    
            create220V(){
                create36v();
            }
    }
    
    
    public class Clienter {
    
        public static void main(String[] args) {
            electricSourceB b= new Adapter();
            p.create220V();
        }
    
    }
    
    

    通过适配器使输入的电压变成36v

    对象适配器模式:

            原理:通过持有适配类的对象,实现被适配

    同样用上面的例子,只是适配器实现做一点修改

    public class Adapter implements electricSourceB{
    
            private electricSource electricSource;
    
            public Adapter(electricSource  e){
                this.electricSource=e;
            }
            create220V(){
                electricSource.create36v();
            }
    }
    
    public class Clienter {
    
        public static void main(String[] args) {
            electricSourceB p = new Adapter(new VPower());
            p.isPs2();
        }
    
    }

    接口适配器模式:

            原理:通过抽象类来实现适配,通过抽象类(适配器)实现被适配接口,再用实现类实现抽象类,可以选择性的实现被适配对象。

     

    适配器模式应用场景

    类适配器与对象适配器的使用场景一致,仅仅是实现手段稍有区别,二者主要用于如下场景:

      (1)想要使用一个已经存在的类,但是它却不符合现有的接口规范,导致无法直接去访问,这时创建一个适配器就能间接去访问这个类中的方法。

      (2)我们有一个类,想将其设计为可重用的类(可被多处访问),我们可以创建适配器来将这个类来适配其他没有提供合适接口的类。

      以上两个场景其实就是从两个角度来描述一类问题,那就是要访问的方法不在合适的接口里,一个从接口出发(被访问),一个从访问出发(主动访问)。

    接口适配器使用场景:

      (1)想要使用接口中的某个或某些方法,但是接口中有太多方法,我们要使用时必须实现接口并实现其中的所有方法,可以使用抽象类来实现接口,并不对方法进行实现(仅置空),然后我们再继承这个抽象类来通过重写想用的方法的方式来实现。这个抽象类就是适配器。

     

    展开全文
  • 对比代理、桥接、装饰器适配器 4 种设计模式,从 模式结构与角色、模式定义与意图、模式区别这几个角度

    戳下面链接查看四种模式相关文章:

    代理模式桥接模式装饰模式适配器模式

    更多设计模式参看:

    设计模式之模式概述(模式汇总)(C++实现)

    代理、桥接、装饰器、适配器,这 4 种模式是比较常用的结构型设计模式。它们的代码结构非常相似。笼统来说,它们都可以称为 Wrapper 模式,也就是通过 Wrapper 类二次封装原始类。

    模式结构与角色:

    先看看 4 种模式各自的结构与角色。

    代理模式:

    • Subject(抽象主题角色):声明了真实主题和代理主题的共同接口,这样一来在任何使用真实主题的地方都可以使用代理主题,客户端通常需要针对抽象主题角色进行编程。
    • Proxy(代理主题角色):代理主题角色通过关联关系引用真实主题角色,因此可以控制和操纵真实主题对象;代理主题角色中提供一个与真实主题角色相同的接口(以在需要时代替真实主题角色),同时还可以在调用对真实主题对象的操作之前或之后增加新的服务和功能;
    • RealSubject(真实主题角色):定义了代理角色所代表的真实对象,在真实主题角色中实现了真实的业务操作,客户端可以通过代理主题角色间接调用真实主题角色中定义的操作。

    Wrapper 类是Proxy
    在这里插入图片描述

    桥接模式:

    • Abstraction(抽象类) : 用于定义抽象类的接口,它一般是抽象类,定义了一个Implementor(实现类接口)类型的对象,与其之间具有关联关系,从而分离抽象接口与实现部分
    • RefinedAbstraction(扩充抽象类): 扩充由Abstraction定义的接口,通常情况下它是具体类,实现Abstraction的抽象业务方法,并可以调用在Implementor中定义的业务方法。
    • Implementor(实现类接口): 定义实现类的接口,Implementor接口声明了一些基本操作,而具体实现交给其子类。通过关联关系,在Abstraction中不仅拥有自己的方法,还可以调用到Implementor中定义的方法,使用关联关系来替代继承关系。
    • ConcreteImplementor(具体实现类): 具体实现Implementor接口,在不同的ConcreteImplementor中提供基本操作的不同实现。

    Wrapper 类是RefinedAbstraction
    在这里插入图片描述

    装饰模式:

    • Component(抽象构件): 它是具体构件抽象装饰类共同父类,声明了在具体构件中实现的业务方法,使客户端能够以一致的方式处理未被装饰的对象以及装饰之后的对象。
    • ConcreteComponent(具体构件): 它是抽象构件类的子类,实现了在抽象构件中声明的方法,装饰器就是为它增加额外的功能(方法)。
    • Decorator(抽象装饰类): 它也是抽象构件类的子类,用于给具体构件增加功能,但是具体功能在它的子类中实现。它维护一个指向抽象构件对象的引用,通过该引用可以调用构件对象的方法,并通过其子类(具体装饰类)扩展该方法,以达到装饰的目的。
    • ConcreteDecorator(具体装饰类): 它是抽象装饰类的子类,负责向构件添加新的功能。每一个具体装饰类都定义了一些新的行为,它可以调用在抽象装饰类中定义的方法,并可以增加新的方法用以扩充对象的行为。

    Wrapper 类是Decorator

    在这里插入图片描述

    适配器模式:

    • Target(目标抽象类): 目标抽象类定义客户所需接口,可以是一个抽象类或接口,也可以是具体类。
    • Adapter(适配器类): 适配器类是适配器模式的核心,可以调用另一个接口,作为一个转换器,对Adaptee和Target进行适配。
    • Adaptee(适配者类): 适配者即被适配的角色,它定义了一个已经存在的接口,这个接口需要适配,适配者类一般是一个具体类,包含了客户希望使用的业务方法,在某些情况下可能没有适配者类的源代码只有接口。

    Wrapper 类是Adapter

    类适配器:

    在这里插入图片描述

    对象适配器:
    在这里插入图片描述

    模式定义与意图:

    再瞧瞧 4 种模式各自的定义与意图

    代理模式

    代理模式: 给某一个对象提供一个代理或占位符,并由代理对象来控制对原对象的访问。其核心是代理类。一般都是采用代理类继承原始类,然后通过关联关系扩展附加功能。

    桥接模式

    第一种理解:

    《设计模式》一书中对桥接模式的定义:

    Decouple an abstraction from its implementation so that the two can vary independently。

    翻译成中文就是:“将抽象和实现解耦,让它们可以独立变化。

    定义中的“抽象”,指的并非“抽象类”或“接口”,而是被抽象出来的一套**“类库”,它只包含骨架代码,真正的业务逻辑需要委派给定义中的“实现”来完成。而定义中的“实现”,也并非“接口的实现类”,而是一套独立的“类库”。“抽象”和“实现”独立开发,通过对象之间的组合关系**,组装在一起。

    第二种理解:

    一个类存在两个(或多个)独立变化的维度,我们通过组合的方式,让这两个(或多个)维度可以独立进行扩展。通过组合关系来替代继承关系,避免继承层次的指数级爆炸。

    将两个或多个独立变化的维度设计为两个或多个独立的继承等级结构,并且在抽象层建立一个或多个抽象关联

    装饰模式

    装饰模式(Decorator Pattern): 动态地给一个对象增加一些额外的职责,就增加对象功能来说,装饰模式比生成子类实现更为灵活。装饰模式是一种对象结构型模式。

    核心在于抽象装饰类的设计,抽象装饰类(装饰器类)和原始类继承同样的父类,这样可以对原始类“嵌套”多个装饰器类。

    适配器模式

    适配器模式(Adapter Pattern): 将一个接口转换成客户希望的另一个接口,使接口不兼容的那些类可以一起工作。适配器模式既可以作为类结构型模式,也可以作为对象结构型模式。

    适配器模式有两种实现方式:类适配器和对象适配器。其中,类适配器使用继承关系来实现,对象适配器使用组合关系来实现

    模式区别:

    代理模式:

    代理模式在不改变原始类接口的条件下,为原始类定义一个代理类,主要目的是控制访问,而非加强功能,这是它跟装饰器模式最大的不同。主要增强的是非主干或者说非业务性的功能

    桥接模式:

    桥接模式的目的是将接口部分和实现部分分离,从而让它们可以较为容易、也相对独立地加以改变。主要是分离接口部分和实现部分,应对两个(或多个)独立变化的维度

    装饰模式:

    装饰模式在不改变原始类接口的情况下,对原始类功能进行增强,并且支持多个装饰器的嵌套使用。主要是对原始类功能进行增强,支持多个装饰器的嵌套使用

    适配器模式:

    适配器模式是一种事后的补救策略,用来补救设计上的缺陷(比如接口不兼容)。适配器提供跟原始类不同的接口,而代理模式、装饰器模式提供的都是跟原始类相同的接口。主要提供跟原始类不同的接口

    参考:

    https://time.geekbang.org/column/article/205912

    个人能力有限,如有错误之处或者其他建议,敬请告知欢迎探讨,谢谢!

    展开全文
  • 一、装饰器: 对原有功能进行扩展,是其原有功能能力得到增强。 当然对原有功能进行增强的方式除了是用适配器模式外,通过继承的方式也是对其他类的功能进行增强。 主要角色有:待装饰抽象类、待装饰类、装饰...
  • 代理、桥接、装饰器适配器,这 4 种模式是比较常用的结构型设计模式。它们的代码结构非常相似。笼统来说,它们都可以称为 Wrapper 模式,也就是通过 Wrapper 类二次封装原始类。尽管代码结构相似.
  • 装饰器模式:是在不必改变原类文件使用继承的情况下,动态的扩展一个对象的功能 适配器模式:将一个类的接口转换成客户希望的另外一个接口 直接上代码分析: package com.think.cla; import java.io....
  • 装饰器适配器模式 在Java语言 I/O库的设计中,使用了两个结构模式,即装饰模式和适配器模式。 在任何一种计算机语言中,输入/输出都是一个很重要的部分。与一般的计算机语言相比,Java将输入/输出的功能使用范畴...
  • 概念: 将一个接口转换成客户希望的另一种接口,适配器模式使得接口不兼容的那些类可以一起工作,别名为包装器(Wrapper)。从而使得原本因接口不...Adapter装饰器类 Adaptee 被适配类 //使用继承,类适配器模式 ...
  • 装饰器这个设计模式也是静态代理极其相似,也和适配器模式极其相似,下面列出了装饰器模式和适配器模式的区别装饰器模式 适配器模式 形式 是一种非常特别的装饰器模式 没有层级关系,...
  • 一、装饰器模式 概念:又名包装(Wrapper)模式,动态地给对象添加额外的职责,从增强功能的角度来说,Decorator模式比子类继承更加灵活,Decorator模式以对客户端透明的方式扩展对象功能 应用场景: 以动态、...
  • 适配器: 笔记本电脑屏幕小要外接显示器,但是只有HDMI接口,而基地的显示器比较旧,用的是VGA...装饰器模式: 低端的电视机只能遥控操作,高端的电视机还可以触屏。 结果:高端电视机能触屏还保留了遥控功能 ...
  • 一、装饰器模式 特点: 在不改变一个对象本身功能的基础上给对象增加新的功能,即功能增强; 如Java IO中的BufferedReader类就是对InputStreamReader类的包装或增强。 BufferedReader br = new BufferedReader...
  • 适配器:没有成绩关系,装饰器模式有层级关系 定义: 装饰者:装饰者被装饰者都实现同一个接口,主要目的是为了扩展之后依旧保留OOP关系 适配器适配器和被适配者没有必然的联系,通常是采用继承或代理的...
  • 装饰器通过包装一个装饰对象来扩展其功能,而又不改变其接口,这实际上是基于对象的适配器模式的一种变种。与对象的适配器模式异同: 相同点:都拥有一个目标对象,都是增加新功能。 2. 不同点:装饰器主要是...
  • Decorator装饰器模式 装饰模式指的是在不必改变原类文件使用继承的情况下,动态地扩展一个对象的功能。它是通过创建一个包装对象,也就是装饰来包裹真实的对象。 java IO 流是装饰模式一个典型的应用场景。 ...
  • 3抽象工厂,每种产品有不同标签 比如不同汽车都有商用跑车(即每个产品还有不同分类),那么抽象工厂会定义生成这写产品的抽象方法,而具体工厂则会实现所有这些产品的某种分类。具体工厂为商用工厂跑车工厂,...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 37,853
精华内容 15,141
关键字:

装饰器和适配器的区别