iOS 适配器模式

本文介绍了适配器模式的基本概念及其实现方式,通过具体的代码示例展示了如何使用适配器模式来解决接口不兼容的问题,并提供了两种不同场景下的应用案例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

适配器可以让一些接口不兼容的类一起工作。它包装一个对象然后暴漏一个标准的交互接口。



protocol Target {

    

    func request()

}



class Adaptee {

    

    func oldRequest() {

        print("执行了方法")

    }

    

}


class Adapter:Target {

    

    privatevar ada:Adaptee!

    

    init(ada:Adaptee) {

        self.ada = ada

    }

    

    func request() {

        ada.oldRequest()

    }

}


class Room:NSObject {

    

    overrideinit() {

        //创建被适配对象

        let adaptee =Adaptee()


        //创建客户端需要调用的接口对象

        let target =Adapter(ada: adaptee)

        //请求处理

        target.request();

    }

}


Room()







///如果上一个看的一脸懵逼 看看下面的






///其他数据转为自己需要数据的适配器

protocol  GetData {

    

    func requestdata() ->StuInfomode

}


//Student类所对应的数据都从这个mode里来取

class StuInfomode:NSObject {

    

    var name:String =""

    var stuNumber:String =""

}


///一个类

class Student:NSObject {

 

    var mode:StuInfomode!   

    ///实例化只需要将实现这个适配器接口传过来

    init(mode:GetData) {

        self.mode = mode.requestdata()

    }

    

    ///假如我们不使用适配器可以使用这个方法但是假如有10个地方用到这个类不可能写10个类似的方法如果在转出自己需要的参数可能就要多谢数行代码,所以肯定不推荐这样写

    /*

    func initmode(mode:BigStuMode) {

        print(mode.nick)

        print(mode.stuNumber)

    }

    */

}


class BigStuMode:NSObject,GetData {

    

    ///实现这个接口的方法

    func requestdata() ->StuInfomode {

        let mode =StuInfomode()

        mode.name =nick

        mode.stuNumber =stuNumber

        return mode

    }

    

    var nick:String =""

    var old:String =""

    var stuNumber:String =""

}


//大学生类

class BigStudent:NSObject {

    

    var studele = BigStuMode()


    overrideinit() {

        super.init()

        print("我是一个大学生")

        mode.nick ="小明"

        mode.old ="5"

        mode.stuNumber ="12345"

        initStudent()

    }

    

    func initStudent() {

        //很明显这个类的接口与要接入的这个类不兼容,所以要通过 GetData这个接口来进行适配的到自己想要的类. 因为BigStuMode实现了GetData这个方法所以可以直接传进去将studele

        let stu =Student(mode: studele)

        //stu.initmode(mode)

        print(stu.mode.name)

        print(stu.mode.stuNumber)

    }

}


BigStudent()





评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值