设计模式利剑13-适配器模式

来源:互联网 发布:3ds淘宝店 编辑:程序博客网 时间:2024/04/30 15:19
 

定      义:将一个类的接口变换成客户端所期待的另一种接口,从而使原本因接口不匹配而无法在一起共走的两个类能够在一起工作

优      点:

            1、适配器模式可以让连个没有任何关系的类在一起运行,只要适配器这个角色能够搞定他们就成

            2、增加了类的透明性

            3、提高了类的复用度

            4、灵活非常好用

使用场景:新需求中提出的改进,原设计模式无法满足,可通过适配器模式来加以解决

使用案例:

              先来看看通用类图吧:

image                首先来看看一个案例,获得连个不同系统的用户信息

               image

view plaincopy to clipboardprint?
  1. Public Interface IUserInfo  
  2.   
  3.     Function getName() As String  
  4.     Function getTel() As String  
  5.     Function getAddress() As String  
  6. End Interface ' IUserInfo  
  7. Public Class UserInfo  
  8.     Implements IUserInfo  
  9.     Private _name As String  
  10.     Private _tel As String  
  11.     Private _address As String  
  12.     Public Sub New(ByVal name As StringByVal tel As StringByVal address As String)  
  13.         _name = name  
  14.         _tel = tel  
  15.         _address = address  
  16.     End Sub  
  17.     Public Function getName() As String Implements IUserInfo.getName  
  18.         Return _name  
  19.     End Function  
  20.     Public Function getTel() As String Implements IUserInfo.getTel  
  21.         Return _tel  
  22.     End Function  
  23.     Public Function getAddress() As String Implements IUserInfo.getAddress  
  24.         Return _address  
  25.     End Function  
  26. End Class ' UserInfo  
  27. Public MustInherit Class IOutUser  
  28.     Public MustOverride Function name() As String  
  29.     Public MustOverride Function phone() As String  
  30.     Public MustOverride Function address() As String  
  31. End Class ' IOutUser  
  32. Public Class OutUser  
  33.     Inherits IOutUser  
  34.     Private _name As String  
  35.     Private _phone As String  
  36.     Private _address As String  
  37.     Public Sub New(ByVal __name As StringByVal __phone As StringByVal __address As String)  
  38.         _name = __name  
  39.         _phone = __phone  
  40.         _address = __address  
  41.     End Sub  
  42.     Public Overrides Function name() As String  
  43.         Return _name  
  44.     End Function  
  45.     Public Overrides Function phone() As String  
  46.         Return _phone  
  47.     End Function  
  48.     Public Overrides Function address() As String  
  49.         Return _address  
  50.     End Function  
  51. End Class ' OutUser  
  52. Public Class OutUserInfo  
  53.     Inherits OutUser  
  54.     Implements IUserInfo  
  55.     Public Sub New(ByVal name As StringByVal phone As StringByVal address As String)  
  56.         MyBase.New(name, phone, address)  
  57.     End Sub  
  58.     Public Function getName() As String Implements IUserInfo.getName  
  59.         Return name()  
  60.     End Function  
  61.     Public Function getAddress() As String Implements IUserInfo.getAddress  
  62.         Return address()  
  63.     End Function  
  64.     Public Function getTel() As String Implements IUserInfo.getTel  
  65.         Return phone()  
  66.     End Function  
  67.     Public Overrides Function name() As String  
  68.         Return "外借人员:" & MyBase.name()  
  69.     End Function  
  70.     Public Overrides Function phone() As String  
  71.         Return MyBase.phone  
  72.     End Function  
  73.     Public Overrides Function address() As String  
  74.         Return MyBase.address  
  75.     End Function  
  76. End Class ' OutUserInfo  
  77. Module Client  
  78.     Sub Main()  
  79.         Dim _arraylist As ArrayList = New ArrayList  
  80.         Dim _IuserInfo As IUserInfo  
  81.         _IuserInfo = New UserInfo("张三""101010""深圳市")  
  82.         _arraylist.Add(_IuserInfo)  
  83.         _IuserInfo = New UserInfo("李四""122212""深圳市")  
  84.         _arraylist.Add(_IuserInfo)  
  85.         _IuserInfo = New UserInfo("小五""222222""深圳市")  
  86.         _arraylist.Add(_IuserInfo)  
  87.         _IuserInfo = New OutUserInfo("六字""222222""深圳市")  
  88.         _arraylist.Add(_IuserInfo)  
  89.         For i As Integer = 0 To _arraylist.Count - 1  
  90.             Console.WriteLine(CType(_arraylist.Item(i), IUserInfo).getName & "      " & CType(_arraylist.Item(i), IUserInfo).getTel & "      " & CType(_arraylist.Item(i), IUserInfo).getAddress)  
  91.         Next  
  92.         Console.Read()  
  93.     End Sub  
  94. End Module  

原创粉丝点击