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

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

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




     The definition of an interface that indicates that the controller should do nothing is as  

follows (in the controller library  LibLightingSystem): 



Public Interface INoRemoteControlRoom 

    Inherits IRoom 

End Interface 



     As you can see;  INoRemoteControlRoom lacks methods and properties; like our placeholder  

interface IRoom。 However; in this case; there are no methods or properties because the kernel  

system does not require them。 The idea behind the INoRemoteControlRoom interface is to indicate  

that the type implementing the interface is a room; but a room that should not be managed by  

the controller。 Using the bedroom as an example; the implementation is as follows (defined in  

the Home project): 



    Imports LibLightingSystem 

    Public Class Bedroom  

        Implements INoRemoteControlRoom 

    End Class 



     The definition of the bedroom allows the kernel to use an instance of a room; as follows: 



Dim rooms As IRoom()= New IRoom(10) { } 

rooms(0) = New Bedroom() 

 。 。 。 



If TypeOf(rooms(0)) Is INoRemoteControlRoom Then 

    ' Take appropriate action 

End If 



     This code creates an array of rooms and assigns the index 0 to an instance of Bedroom。 The  

If statement asks if the  IRoom instance in index 0 is of type INoRemoteControlRoom。 


…………………………………………………………Page 224……………………………………………………………

202        CH AP T E R   8   ■    L E A R N IN G   AB OU T   CO M P O N E N TO R IE N T E D  AR C HI TE CT U R E 



           ■Note  Using placeholder interfaces and inheritance sets up a very powerful architecture that allows you to  

           create groupings。 You can then filter individual instances based on refinements of the grouping。 All of this is  

           possible in the Visual Basic language using TryCast() and Is; which allow queries of subclassed types of  

           an instance。 The queries are noninvasive and do not cause exceptions to be thrown。 The queries give you the  

           ability to make decisions based on whether an instance would like to be associated with a particular grouping  

           based on an interface。 



           Defining the IRemoteControlRoom Interface 



           Another type of room is one where the lighting is pletely managed by the controller。 The  

           controller does not seek the input of the room and manages the lighting based on the logic that  

           seems appropriate to it。 

                 For example; a public…viewing area in a museum does not require light at certain times of  

           day。 When the museum is closed and the cleaners are finished; the lights can be turned off。 When  

           the museum is open; the lights are turned on。 This is a simple logic and can be pletely  

           managed by the controller。 

                 The interface for the controlled room is defined as follows (in  LibLightingSystem): 



           Public Interface IRemoteControlRoom 

               Inherits IRoom 

               ReadOnly Property LightLevel() As Double 

               Sub LightSwitch(ByVal lightState As Boolean) 

               Sub DimLight(ByVal level As Double) 

           End Interface 



                 The only input that IRemoteControlRoom provides is information about whether the light is  

           on; off; or at a certain level。 This is through the  LightLevel property。 The  LightLevel property  

           is read…only; because the controller and the light level might bee out of sync。 

                 For example; suppose it’s time for the museum to close; and the lights are switched off in  

           the public…viewing area。 But today; the cleaners took a little while longer than usual。 They turn  

           the lights back on so that they can see what they are doing。 The local device can do one of two  

           things: allow the light to be turned on without the approval of the controller; or not allow the  

           light to be turned on; requiring a controller intervention。 The best approach is to allow a local  

           override and let the cleaners turn on the light。 The LightLevel property is necessary so that the  

           controller can verify if the state of the light is what the controller expects it to be。  



           ■Note  When you are defining a kernel; sometimes it is necessary to add functionality into an interface that  

           verifies the state of the implementation。 Because the kernel is not in control of the implementation; the kernel  

           should not assume the state; as the state could change for some reason。 In the case of the lighting system;  

           the change could be due to a cleaner turning on the light after it was turned off。 


…………………………………………………………Page 225……………………………………………………………

                              C H AP TE R   8   ■    L E AR N IN G   AB O U T   CO M P O N E N T O R IE N TE D   A R CH I TE C TU R E 203 



      The  IRemoteControlRoom methods  LightSwitch() and DimLight() turn the light on or off  

and set the light to a certain level; respectively。 These methods are used to control the state of  

the implementation。 



Defining the ISensorRoom Interface 



Another type of room is one that can be controlled under certain circumstances。 Let’s go back  

to the cleaner example where the cleaner turned on the light。 If the controller notices that the  

light is on; even though it was turned off; should the controller turn off the light? You might say  

sure; the controller should turn off the light。 However; that is not pletely correct。 Imagine  

the situation where the cleaner turns on the light and the controller turns it off。 The cleaner would  

immediately turn the light back on; and the controller would turn it off。 The cleaner would tape  

the light switch down so that a constant battle of the light going on and off ensues (because this  

battle is in milliseconds; the light remains on)。 A smarter approach would be to allow a timing  

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