友情提示:如果本网页打开太慢或显示不完整,请尝试鼠标右键“刷新”本网页!阅读过程发现任何错误请告诉我们,谢谢!! 报告错误
狗狗书籍 返回本书目录 我的书架 我的书签 TXT全本下载 进入书吧 加入书签

VB2008从入门到精通(PDF格式英文版)-第186章

按键盘上方向键 ← 或 → 可快速上下翻页,按键盘上的 Enter 键可回到本书目录页,按键盘上方向键 ↑ 可回到本页顶部!
————未阅读完?加入书签已便下次继续阅读!




           a matter of experience—the only way to learn is to write code。 



           Extending the Lottery…Prediction System 



           In Chapter 10; the IProcessor interface was a good first step because it solved the problem at  

          hand。 The problem was to convert each line of text into another line of text。 However; in this  

           chapter’s example; that interface is not enough。 We need to add two other methods: Initialize()  

           and Destroy()。 

                We want to find the frequencies of an individual number in the drawn lotteries。 The orig

          inal interface method IProcessor。Process() is used to process an individual line of text; and  

          the frequencies can be calculated only after all of the draws have been processed。 Thus; we add  

           Destroy(); which is called after all of the lines of text have been read。 mon coding convention  


…………………………………………………………Page 419……………………………………………………………

                                                                 CH AP T E R   1 5   ■    L E A R N I N G   A B OU T   L I N Q 397 



says that if you have a Destroy() method; you should have an  Initialize() method that is  

called before the lines of text are processed。 

     Having extra requirements is not a problem and is fairly mon。 But you want to add the  

extra requirements without disrupting existing functionality。 After all; if some code works; you  

don’t want to break it because of additional requirements。 Thus; you don’t want to add the  

methods to the IProcessor interface like this: 



Public Interface IProcessor  

    Function Initialize() As String 

    Function Destroy() As String 

    Function Process(ByVal input As String) As String 

End Interface 



     This code is a no…no because you are breaking existing functionality。 Any class that imple

ments IProcessor must now implement the methods  Initialize() and Destroy(); even though  

those classes don’t need those methods。 

     Thus; when adding requirements; you should not change existing interfaces。 You create  

new interfaces and subclass the existing interfaces; like this: 



Public Interface IExtendedProcessor 

    Inherits IProcessor 

    Function Destroy() As String 

    Function Initialize() As String 

End Interface  



     The new interface IExtendedProcessor has the new methods  Initialize() and Destroy();  

but inherits the method Process()。 The old functionality still has only a single method; and the  

new functionality is free to implement either interface。 

     Adding new interfaces and new methods does not mean everything will work as is。 If you  

go back and look at the source code from Chapter 10; you’ll see that the IProcessor interface  

was used by the Bootstrap class。 So; if you want the  IExtendedProcessor interface to be recog

nized; you must update Bootstrap。 Updating Bootstrap is fine; because it does not mean that  

IProcessor implementations must be updated (or; at least; Bootstrap should not require  

that IProcessor implementations be updated)。 

     The original abbreviated implementation of  Bootstrap is as follows: 



Imports System。IO 



Public Module Bootstrap 

    Public Sub DisplayHelp() 

        Console。WriteLine(〃You need help? Right now?〃) 

    End Sub 



    Public Sub Start(ByVal args As String(); _ 

        ByVal processor As IProcessor) 

        Dim reader As TextReader = Nothing 

        Dim writer As TextWriter = Nothing 


…………………………………………………………Page 420……………………………………………………………

398      CH AP T E R   1 5   ■    L E A R N I N G   A B OU T   L I N Q 



                  If (args。Length = 0) Then 

                      reader = Console。In 

                      writer = Console。Out 

                  ElseIf (args。Length = 1) Then 

                      If (args(0) = 〃…help〃) Then 

                          Bootstrap。DisplayHelp() 

                          Return 

                      End If 

                      reader = File。OpenText(args(0)) 

                      writer = Console。Out 

                  End If 

                  ' Abbreviated 

                  writer。Write(processor。Process(reader。ReadToEnd())) 

              End Sub 



          End Module  



               In the original implementation; the method Process() is called to read an input and write  

          an output stream。 Since Initialize() and  Destroy()  should be called before and after the  

          string is processed; the most logical location of each method would be before and after the  

          processor。Process() method; like this: 



          Imports System。IO 



          Public Module Bootstrap 

              Public Sub DisplayHelp() 

                  Console。WriteLine(〃You need help? Right now?〃) 

              End Sub 



              Public Sub Start(ByVal args As String(); _ 

                  ByVal processor As IProcessor) 

                  Dim reader As TextReader = Nothing 

                  Dim writer As TextWriter = Nothing 

                  If (args。Length = 0) Then 

                      reader = Console。In 

                      writer = Console。Out 

                  ElseIf (args。Length = 1) Then 

                      If (args(0) = 〃…help〃) Then 

                          Bootstrap。DisplayHelp() 

                          Return 

                      End If 

                      reader = File。OpenText(args(0)) 

                      writer = Console。Out 

                  End If 

                  ' Abbreviated 

                  If TypeOf processor Is IExtendedProcessor Then 

                      writer。Write( _ 

                      DirectCast(processor; IExtendedProcessor)。Initialize()) 

                  End If 


…………………………………………………………Page 421……………………………………………………………

                                                                  CH AP T E R   1 5   ■    L E A R N I N G   A B OU T   L I N Q 399 



       
返回目录 上一页 下一页 回到顶部 0 0
未阅读完?加入书签已便下次继续阅读!
温馨提示: 温看小说的同时发表评论,说出自己的看法和其它小伙伴们分享也不错哦!发表书评还可以获得积分和经验奖励,认真写原创书评 被采纳为精评可以获得大量金币、积分和经验奖励哦!