对象结构型模式——适配器模式(adapter)

版权声明:本文为博主原创文章,但部分内容来源网络,如有侵权,告知即删! https://blog.csdn.net/chenyuan_jhon/article/details/78351592
  • 定义:
    将一个类的接口转换成客户希望的另一个类的接口,适配器模式使原本不兼容的类可以在一起工作。
  • 概述:
    主要功能是匹配转换,目的是复用已有的功能。适配器类里面也可以有自己的实现,并且适配器类是用对象的组合的方式来调用适配者中的实现。
  • 实例(Kotlin语言)
    以下是Duck接口(对应标准模式中的Target接口)
interface Duck {
    fun quack()
    fun fly()
}

以下是鸭子的实现类

class MallardDuck:Duck {
    override fun quack() {
        println("鸭子呱呱叫。。。")
    }

    override fun fly() {
        println("鸭子正在飞。。。")
    }
}

以下是火鸡(Turkey)的接口,对应标准模式中的Adaptee

interface Turkey {
    fun gobble()
    fun fly()
}

以下是火鸡的实现类

class WildTurkey:Turkey {
    override fun gobble() {
        println("咯咯叫")
    }

    override fun fly() {
        println("能飞一小段距离")
    }
}

以下是适配类,对应标准模式中的adapter

/**
 * 火鸡适配器,将火鸡适配成鸭子
 */
class TurkeyAdapter(val turkey: Turkey):Duck {

    override fun quack() {
        turkey.gobble()
    }

    override fun fly() {
        for (i in 0..5) {
            turkey.fly()
        }
    }
}

以下是测试类及结果

fun main(args: Array<String>) {
    val wildTurkey = WildTurkey()
    val mallardDuck = MallardDuck()
    val turkeyAdapter = TurkeyAdapter(wildTurkey)

    println("MallardDuck begin .....")
    textDuck(mallardDuck)

    println("假鸭子 begin .....")
    textDuck(turkeyAdapter)
}

private fun textDuck(turkeyAdapter: Duck) {
    turkeyAdapter.quack()
    turkeyAdapter.fly()
}
//运行结果
MallardDuck begin .....
鸭子呱呱叫。。。
鸭子正在飞。。。
假鸭子 begin .....
咯咯叫
能飞一小段距离
能飞一小段距离
能飞一小段距离
能飞一小段距离
能飞一小段距离
能飞一小段距离

Process finished with exit code 0
  • 类图
    这里写图片描述

如有错误,请留言更正,或进580725421群讨论,以免误导其他开发者!!!

猜你喜欢

转载自blog.csdn.net/chenyuan_jhon/article/details/78351592