专注于互联网--专注于架构

最新标签
网站地图
文章索引
Rss订阅

首页 »VB教程 » 适配器模式:设计模式和VB .net实现 适配器模式 »正文

适配器模式:设计模式和VB .net实现 适配器模式

来源: 发布时间:星期四, 2009年1月15日 浏览:70次 评论:0
  这是看Design Patterns in C#同步心得体会记录.里头记录了VB实现代码,还有些感性认识,另外,忽略些C#特性和不太相关东西.

  这本书买了有两年了,开始时看不懂.直到近来才有所体会.

  第部分 接口型模式介绍  接口型模式,通俗说就是使用种约定好接口,来完成两个类的间.先不管这中约定是为什么而来.

  接口为什么而来问题,将会对应产生区别接口型模式.

  接口和抽象类区别,我认为最本质是:接口是种约定,而抽象类是种真实抽象,它是某类东西具体表现.而接口?则什么都不是,只是种方面描述.

  抽象类是必将会产生个真实对象,而不管这个对象是在继承链层.

  接口仅仅只是个方面描述.

  这样就能够明白,什么地方要使用接口,什么地方要使用抽象类.又为什么VB中个类可以实现多个接口,而只能继承个类.

  适配器模式  我们有个现成类Supply用来记录供应商 ,另外个开发者Perry也生成类似于Supply类叫:SuperSupply,它实现了某个接口 CompanyInterface(记录相关往来公司信息接口).功能和Supply差不多,但Perry不能让这个类成员和Supply成员取名称(觉得Supply中成员名称取太次了,没点儿水平.最重要是,定义CompanyInterface 人,完全没看到Supply,这人该被罚买王老吉箱).于是,Perry决定适配 Supply类,Supply中代码还过去,能完成任务,不出错,

  其实,适配就是将Supply包装下,换个名称,用另个成员名称其成员.就象给辆两厢轿车装个吉普外壳.当然,现实中这样车很难有吉普表现,但计算机却无所不能.请看:

Public Interface CompanyInterfaceInterface CompanyInterface
  Function getRankFunction getRank As Integer  '返回相关公司级别
  '......
  
End Interface
  
Public Class SuperSupplyClass SuperSupply      'Perry编写类,它实现了接口:CompanyInterface,能被客户
  Implements CompanyInterface
  
  Private mSupply As Supply    '被适配类,它提供了些要求具体实现
  Sub NewSub New
    mSupply = New Supply
  End Sub
  
  Public Function getRank1Function getRank1 As Integer Implements CompanyInterface.getRank    '将被客户思路方法:getRank1
    Dim mRank As Integer = -1
    '........
    mRank = mSupply.SupplyRank                         '实际上是间接了Supply中思路方法:SupplyRank
    '........
    Return mRank
  End Function
End Class
  
Public Class SupplyClass Supply               '无名英雄,它没有实现接口CompanyInterface,不能被客户
  Public Function SupplyRankFunction SupplyRank As Integer
    Dim mRank As Integer = -1
    '.......
    Return mRank
  End Function
End Class


  造成这种现象原因通俗来比喻,就是:有了辆两厢车,但越野赛只能让吉普车参加.没办法.这里头:

  越野赛规定是客户端请求约定:必须要有 4轮驱动,大排汽口什么.(CompanyInterface)

  吉普车外壳就是个适配器,用来适配这些要求和供应者(SuperSupply)

  两厢车就是被适配对象(Supply).

  这样来,这个车就能参加比赛了,他能跑,而且看上去和别吉普车没什么区别.如果驾驶员Perry水平高话,说不定跑还快...

  适配器模式,书中说了两种类型:类适配器,对象适配器.上面事例代码是对象适配器,Supply类是作为个对象,来提供被适配成员.而类适配器是:

Public Interface CompanyInterfaceInterface CompanyInterface
  Function getRankFunction getRank As Integer  '返回相关公司级别
  '......
  
End Interface
  
Public Class SuperSupplyClass SuperSupply      'Perry编写类,它实现了接口:CompanyInterface,能被客户
  Inherits Supply         '从supply中派生出来,继承了Supply所有特性
  Implements CompanyInterface
  
  'Private mSupply As Supply    '被适配类,它提供了些要求具体实现
  Sub NewSub New
    'mSupply = New Supply
  End Sub
  
  Public Function getRank1Function getRank1 As Integer Implements CompanyInterface.getRank    '将被客户思路方法:getRank1
    Dim mRank As Integer = -1
    '........
    'mRank = mSupply.SupplyRank                         '实际上是间接了Supply中思路方法:SupplyRank
    mRank = SupplyRank
    '........
    Return mRank
  End Function
End Class
  
Public Class SupplyClass Supply               '无名英雄,它没有实现接口CompanyInterface,不能被客户
  Public Function SupplyRankFunction SupplyRank As Integer
    Dim mRank As Integer = -1
    '.......
    Return mRank
  End Function
End Class




  和对象适配器区别是,它直接从Supply中派生,不用有Supply例子成员变量.他们各有各不好的处:

  类适配器在SupplySuper要从其他类中派生时,就不能使用了,单继承.

  对象适配器,要有个Supply事例成员,可能有些额外工作如销毁,异常.

  外观模式  待续...



0

相关文章

读者评论

发表评论

  • 昵称:
  • 内容: