IT铁人DAY 18-Adapter 适配器模式

  今天介绍的Adapter Pattern是属於结构型模式,以字面上来说不难猜到它是用来让物件与物件之间能够协同合作,至於它是怎麽运作的,现在就一起来认识吧!


问题情境与解析

  举一个最贴近生活的例子,那就是充电头与插座,每当要出国的时候,行李里面一定要有的是手机充电器,不过每个国家的充电插座规格都不尽相同,为了要让我们的充电头与插座可以相容,就一定要有特定的转接头,才能让手机充电。

  Adapter的角色就是一个转接头,为了让充电头可以符合其他国家的插座规格,就得需要有符合该插座的充电头(Adaptee)的行为模式(method),使原本的充电头可以套用,如此来达到使用者的目的,也就是在其他国家充电。

  再来Adapter有分成两种,一个是Object Adapter,另一个则是Class Adapter,前者实现了一个物件的介面并包含另一个;而後者须用多重继承来实现它,也就是要用支援多重继承的程序语言来实现,如果还不是很清楚的话,可以看以下的Class Diagram来了解他们之间微妙的差异。

Class Diagram

https://ithelp.ithome.com.tw/upload/images/20210930/201407437BnZUbsiT5.png

https://ithelp.ithome.com.tw/upload/images/20210930/20140743PWe2bnaphL.png

Skeleton Code

interface Target {
    public void operation();
}

class Target1 implements Target {
    public void operation() {
        // do something
    }
}

class Adapter implements Target {
    Adaptee adaptee;
    public Adapter(Adaptee adaptee) {
        this.adaptee = adaptee;
    }

    public void operation() {
        adaptee.specialOperater();
    }
}

class Adaptee {
    public void specialOperater() {
        // do something
    }
}

  因为有许多程序语言都不支援多重继承,所以上面的程序码范例使用的是Object Adapter。当遇到某些功能无法添加到父类别来让子类别重用时,就可以将这些缺少的功能放到Adapter内,来满足子类别。


除此之外,也欢迎大家走走逛逛关於我们团队夥伴的文章

lu23770127 - SASS 基础初学三十天

10u1 - 糟了!是世界奇观!

juck30808 - Python - 数位行销分析与 Youtube API 教学

SiQing47 - 前端?後端?你早晚都要全端的,何不从现在开始?


<<:  DAY 18 制作 Nav Bar - dropdown

>>:  [区块链&DAPP介绍 Day25] Dapp 实战 投票系统 - 1

#3 JavaScript Crash Course 2

今天教 Promise Async / Await。 Promise Promise 这个东西跟时间...

【Day9】利用列举技术取得更多资讯

哈罗~ 前两天介绍了网路扫描的Hping 与 Nmap, 这两个工具可以协助我们搜索目前网域中的目标...

全端入门Day07_何谓全端之後端中篇

昨天介绍了後端程序语言,但那些程序语言其实都有自己的框架 今天就来介绍什麽是框架,为什麽要用框架 在...

Day9 自订开机执行的程序码 - 函数宣告与语法糖

前面几天,我探索了 Lua 的变数型别、条件判断、回圈、标准函式库等 在这过程中,我已经多少看过函数...

Day 22 - 新的一年离职同事的惊喜专案包(上)

顺利结束了研习的指导计画以及协助厂商的辅导计画案之後,新的一年也到来并且也有越来越多的需求,而在这个...