首页 > 其他分享 >设计模式10 - 设计模式 - 适配器设计模式(高频-结构型)

设计模式10 - 设计模式 - 适配器设计模式(高频-结构型)

时间:2022-08-23 23:03:41浏览次数:78  
标签:10 适配 适配器 接口 output 设计模式 public adapter

一、定义

  适配器模式将一个类的接口转换成客户希望的另外一个接口。适配器模式使得原本由于接口不兼容而不能在一起工作的那些类可以一起工作。

       适配器模式:适配器模式是一种事后的补救策略。适配器提供跟原始类不同的接口,而代理模式、装饰器模式提供的都是跟原始类相同的接口。

二、实现方式

适配器模式中的角色有:

1、目标角色(target):这是客户锁期待的接口。目标可以是具体的或抽象的类,也可以是接口

2、原始角色(adaptee):已有接口/类,但是和客户器期待的接口不同。

3、适配器角色(adapter):将已有接口转换成目标接口。

适配器模式,主要有两种实现方式,分别是:类适配器和对象适配器

  • 类适配器:通过继承适配者 + 实现目标接口 来实现适配器功能。

  • 对象适配器:通过组合适配者(适配者对象引入) + 实现目标接口 来实现适配器功能

    类适配器模式(class adapter pattern):

    由于适配器adapter类是适配者adaptee类的子类,因此可以在适配器类中置换一些适配者的方法,即Override(重写),使得适配器的灵活性更强。

    对象适配器模式(object adapter pattern):

    一个对象适配器可以把多个不同的适配者adaptee适配到一个目标,也就是说,同一个适配器可以将适配者类和它的子类都适配到目标接口。

场景: 本身有220V输出电压,现在要新增5V输出电压。

1.1、原始角色

/**
 * 原始类
 */
public class Adaptee {
    public int methodBy220() {
        System.out.println("电源输出电压:220V");
        return 220;
    }
}

1.2、目标角色

1 ​
2 public interface ITarget {
3     public int method5();
4 }

 

1.3、适配器角色 - 类适配器模式

 1 public class Adapter extends Adaptee implements ITarget {
 2     @Override
 3     public int method5() {
 4         int output = super.methodBy220();
 5         System.out.println("电源适配器开始工作,此时输出电压是:" + output);
 6         output = output/44;
 7         System.out.println("电源适配器工作完成,此时输出电压是:" + output);
 8         return output;
 9     }
10 }

 

1.4、适配器角色 - 对象适配器模式

 1 public class Adapter implements PowerTarget{
 2     // 适配者角色
 3     private Adaptee adaptee;
 4 ​
 5     public Adapter(Adaptee adaptee) {
 6         this.adaptee = adaptee;
 7     }
 8 ​
 9     @Override
10     public int method5() {
11          int output = adaptee.methodBy220();
12         System.out.println("电源适配器开始工作,此时输出电压是:" + output);
13         output = output/44;
14         System.out.println("电源适配器工作完成,此时输出电压是:" + output);
15         return output;
16     }
17     
18 }

 

结果:

 public static void main(String[] args) {
       Adapter adapter =  new Adapter();
       adapter.method5();
    }
    或者
   public static void main(String[] args) {
       Adapter adapter =  new Adapter(new Adaptee);
       adapter.method5();
    }  
电源输出电压:220V
电源适配器开始工作,此时输出电压是:220
电源适配器工作完成,此时输出电压是:5   

 

三、使用场景-待补充

 

 

标签:10,适配,适配器,接口,output,设计模式,public,adapter
From: https://www.cnblogs.com/baopeer/p/16618180.html

相关文章

  • 1087 有多少不同的值——20分
    当自然数n依次取1、2、3、……、N时,算式⌊n/2⌋+⌊n/3⌋+⌊n/5⌋有多少个不同的值?(注:⌊x⌋为取整函数,表示不超过x的最大自然数,即x的整数部分。)输入格式:输入给......
  • 1088 三人行——20分
    子曰:“三人行,必有我师焉。择其善者而从之,其不善者而改之。”本题给定甲、乙、丙三个人的能力值关系为:甲的能力值确定是2位正整数;把甲的能力值的2个数字调换位置就是乙......
  • 1089 狼人杀-简单版——20分
    以下文字摘自《灵机一动·好玩的数学》:“狼人杀”游戏分为狼人、好人两大阵营。在一局“狼人杀”游戏中,1号玩家说:“2号是狼人”,2号玩家说:“3号是好人”,3号玩家说:“4......
  • 1090 危险品装箱——25分
    集装箱运输货物时,我们必须特别小心,不能把不相容的货物装在一只箱子里。比如氧化剂绝对不能跟易燃液体同箱,否则很容易造成爆炸。本题给定一张不相容物品的清单,需要你检查每......
  • 1084 外观数列——20分
    外观数列是指具有以下特点的整数序列:d,d1,d111,d113,d11231,d112213111,...它从不等于1的数字d开始,序列的第n+1项是对第n项的描述。比如第2项表示第1......
  • 1032 Rinne Loves Dynamic Graph 循环分层图 最短路
     链接:https://ac.nowcoder.com/acm/contest/26077/1032来源:牛客网题目描述Rinne学到了一个新的奇妙的东西叫做动态图,这里的动态图的定义是边......
  • 2022“杭电杯”中国大学生算法设计超级联赛(10)
    比赛链接:https://vjudge.net/contest/511178C-WavyTree题意:长为\(n\)的序列,每一步操作可以让\(a_i\)变成\(a_j\),花费为\(\lverta_i-a_j\rvert\)。现在要......
  • 常用设计模式(Python版)
    1.设计模式是什么?有什么用?设计模式是软件开发过程中经过验证的、用于解决特定环境下、重复出现的、特定问题的解决方案。根据GoF(GangOfFour),设计模式被分为三类:创......
  • 玩转10x单细胞 | scRNA-seq | scATAC-seq | Spatial transcriptome | CRISPR | Pertur
     10x是最成功的单细胞公司,目前最成功的商业平台,已经有很多成熟的单细胞产品线,不管是新手还是进阶的高手都在玩他们平台产生的数据。这里试图对10x的核心技术和数据来做......
  • 部标Jt809协议视频对接播放下级平台JT1078视频
    部标809协议是部标协议中最复杂的协议,而其中的视频协议对接部分,又是809协议指令中最复杂的指令,也是技术实现最困难的部分。这个复杂有本身涉及上级,下级,和设备多环节交互的......