今天介绍的Adapter Pattern是属於结构型模式,以字面上来说不难猜到它是用来让物件与物件之间能够协同合作,至於它是怎麽运作的,现在就一起来认识吧!
举一个最贴近生活的例子,那就是充电头与插座,每当要出国的时候,行李里面一定要有的是手机充电器,不过每个国家的充电插座规格都不尽相同,为了要让我们的充电头与插座可以相容,就一定要有特定的转接头,才能让手机充电。
Adapter的角色就是一个转接头,为了让充电头可以符合其他国家的插座规格,就得需要有符合该插座的充电头(Adaptee)的行为模式(method),使原本的充电头可以套用,如此来达到使用者的目的,也就是在其他国家充电。
再来Adapter有分成两种,一个是Object Adapter,另一个则是Class Adapter,前者实现了一个物件的介面并包含另一个;而後者须用多重继承来实现它,也就是要用支援多重继承的程序语言来实现,如果还不是很清楚的话,可以看以下的Class Diagram来了解他们之间微妙的差异。
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内,来满足子类别。
除此之外,也欢迎大家走走逛逛关於我们团队夥伴的文章
juck30808 - Python - 数位行销分析与 Youtube API 教学
SiQing47 - 前端?後端?你早晚都要全端的,何不从现在开始?
<<: DAY 18 制作 Nav Bar - dropdown
>>: [区块链&DAPP介绍 Day25] Dapp 实战 投票系统 - 1
今天教 Promise Async / Await。 Promise Promise 这个东西跟时间...
哈罗~ 前两天介绍了网路扫描的Hping 与 Nmap, 这两个工具可以协助我们搜索目前网域中的目标...
昨天介绍了後端程序语言,但那些程序语言其实都有自己的框架 今天就来介绍什麽是框架,为什麽要用框架 在...
前面几天,我探索了 Lua 的变数型别、条件判断、回圈、标准函式库等 在这过程中,我已经多少看过函数...
顺利结束了研习的指导计画以及协助厂商的辅导计画案之後,新的一年也到来并且也有越来越多的需求,而在这个...