定 义:将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起共走的两个类能够在一起工作
优 点:
1、适配器模式可以让连个没有任何关系的类在一起运行,只要适配器这个角色能够搞定他们就成
2、增加了类的透明性
3、提高了类的复用度
4、灵活非常好用
使用场景:新需求中提出的改进,原设计模式无法满足,可通过适配器模式来加以解决
使用案例:
先来看看通用类图吧:
首先来看看一个案例,获得连个不同系统的用户信息
Public Interface IUserInfo
Function getName() As String
Function getTel() As String
Function getAddress() As String
End Interface ' IUserInfo
Public Class UserInfo
Implements IUserInfo
Private _name As String
Private _tel As String
Private _address As String
Public Sub New(ByVal name As String, ByVal tel As String, ByVal address As String)
_name = name
_tel = tel
_address = address
End Sub
Public Function getName() As String Implements IUserInfo.getName
Return _name
End Function
Public Function getTel() As String Implements IUserInfo.getTel
Return _tel
End Function
Public Function getAddress() As String Implements IUserInfo.getAddress
Return _address
End Function
End Class ' UserInfo
Public MustInherit Class IOutUser
Public MustOverride Function name() As String
Public MustOverride Function phone() As String
Public MustOverride Function address() As String
End Class ' IOutUser
Public Class OutUser
Inherits IOutUser
Private _name As String
Private _phone As String
Private _address As String
Public Sub New(ByVal __name As String, ByVal __phone As String, ByVal __address As String)
_name = __name
_phone = __phone
_address = __address
End Sub
Public Overrides Function name() As String
Return _name
End Function
Public Overrides Function phone() As String
Return _phone
End Function
Public Overrides Function address() As String
Return _address
End Function
End Class ' OutUser
Public Class OutUserInfo
Inherits OutUser
Implements IUserInfo
Public Sub New(ByVal name As String, ByVal phone As String, ByVal address As String)
MyBase.New(name, phone, address)
End Sub
Public Function getName() As String Implements IUserInfo.getName
Return name()
End Function
Public Function getAddress() As String Implements IUserInfo.getAddress
Return address()
End Function
Public Function getTel() As String Implements IUserInfo.getTel
Return phone()
End Function
Public Overrides Function name() As String
Return "外借人员:" & MyBase.name()
End Function
Public Overrides Function phone() As String
Return MyBase.phone
End Function
Public Overrides Function address() As String
Return MyBase.address
End Function
End Class ' OutUserInfo
Module Client
Sub Main()
Dim _arraylist As ArrayList = New ArrayList
Dim _IuserInfo As IUserInfo
_IuserInfo = New UserInfo("张三", "101010", "深圳市")
_arraylist.Add(_IuserInfo)
_IuserInfo = New UserInfo("李四", "122212", "深圳市")
_arraylist.Add(_IuserInfo)
_IuserInfo = New UserInfo("小五", "222222", "深圳市")
_arraylist.Add(_IuserInfo)
_IuserInfo = New OutUserInfo("六字", "222222", "深圳市")
_arraylist.Add(_IuserInfo)
For i As Integer = 0 To _arraylist.Count - 1
Console.WriteLine(CType(_arraylist.Item(i), IUserInfo).getName & " " & CType(_arraylist.Item(i), IUserInfo).getTel & " " & CType(_arraylist.Item(i), IUserInfo).getAddress)
Next
Console.Read()
End Sub
End Module