zoukankan      html  css  js  c++  java
  • java23种设计模式——六、适配器模式

    源码在我的githubgitee中获取

    目录

    java23种设计模式—— 一、设计模式介绍
    java23种设计模式—— 二、单例模式
    java23种设计模式——三、工厂模式
    java23种设计模式——四、原型模式
    java23种设计模式——五、建造者模式
    java23种设计模式——六、适配器模式
    java23种设计模式——七、桥接模式
    java23种设计模式——八、组合模式

    介绍

    适配器模式(Adapter Pattern)是作为两个不兼容的接口之间的桥梁。这种类型的设计模式属于结构型模式,它结合了两个独立接口的功能。

    这种模式涉及到一个单一的类,该类负责加入独立的或不兼容的接口功能。举个真实的例子,现在我们很多手机没有了耳机的插孔,只留下了type-c的插口,如果我们想使用有线耳机的话就要买一个耳机转type-c的转换器

    在这里插入图片描述

    应用场景

    系统需要使用现有的类,而此类的接口不符合系统的需要。
    想要建立一个可以重复使用的类,用于与一些彼此之间没有太大关联的一些类,包括一些可能在将来引进的类一起工作,这些源类不一定有一致的接口。
    通过接口转换,将一个类插入另一个类系中。

    优缺点

    • 优点

    1、可以让任何两个没有关联的类一起运行。

    2、提高了类的复用。

    3、增加了类的透明度。

    4、灵活性好。

    • 缺点

    1、过多地使用适配器,会让系统非常零乱,不易整体进行把握。比如,明明看到调用的是 A 接口,其实内部被适配成了 B 接口的实现,一个系统如果太多出现这种情况,无异于一场灾难。因此如果不是很有必要,可以不使用适配器,而是直接对系统进行重构。

    2.由于 JAVA 至多继承一个类,所以至多只能适配一个适配者类,而且目标类必须是抽象类

    模式实现

    适配器模式有如下三个个角色:

    • 源(Adaptee):目标抽象类定义客户所需接口,可以是一个抽象类或接口,也可以
      是具体类,相当于typec线。
    • 适配器(Adapter):连接目标和源的中间对象,可以调用另一个接口,作为一个转换器。相当于耳机转typec转换器。
    • 目标(Target):即被适配的角色,相当于手机。

    首先我们有一个手机类,有一个typec接口默认可以充电

    /**
     * @author codermy
     * @createTime 2020/7/25
     */
    public class Phone {
        public String throwTypec(){
            System.out.println("使用了typec接口");
            return "充电";
        }
    }
    

    有一个耳机可以放音乐

    /**
     * @author codermy
     * @createTime 2020/7/25
     */
    public interface Headset {
        String music();
    }
    
    

    现在买了一个转换器可以让有线耳机链接手机

    /**
     * @author codermy
     * @createTime 2020/7/25
     * 转换器
     */
    public class Converter implements Headset {
        
        private Phone phone;
    
        public Converter(Phone phone){
            this.phone = phone;
        }
    
        @Override
        public String music() {
            String s = phone.throwTypec();
            System.out.println(String.format("%s  --------------  > %s",s,"听歌"));
            return "听歌";
        }
    }
    
    

    用户使用转接器

    /**
     * @author codermy
     * @createTime 2020/7/25
     */
    public class Client {
        public static void main(String[] args) {
            Phone phone = new Phone();
            Headset headset = new Converter(phone);
            headset.music();
        }
    }
    

    输出

    使用了typec接口
    充电  --------------  > 听歌
    
  • 相关阅读:
    BZOJ3932 [CQOI2015]任务查询系统
    数位DP专练
    Codeforces #669 div2
    Codeforces #670 div2
    P1450 [HAOI2008] 硬币购物
    P3172 [CQOI2015]选数
    比赛-Round 1 (12 Jul, 2018)
    “记计帐”需求分析
    一个程序员的哲学思考
    中国式大学——我们需要获得什么?
  • 原文地址:https://www.cnblogs.com/codermy/p/13577408.html
Copyright © 2011-2022 走看看