适配器可以让一些接口不兼容的类一起工作。它包装一个对象然后暴漏一个标准的交互接口。
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()