Size: 1803
Comment:
|
← Revision 8 as of 2009-12-25 07:15:56 ⇥
Size: 1719
Comment: converted to 1.6 markup
|
Deletions are marked like this. | Additions are marked like this. |
Line 4: | Line 4: |
-- flyaflya [[[DateTime(2005-08-04T09:20:24Z)]]] [[TableOfContents]] |
-- flyaflya [<<DateTime(2005-08-04T09:20:24Z)>>] <<TableOfContents>> |
Line 8: | Line 8: |
为其他对象提供一种代理以控制对这个对象的访问。[[BR]] attachment:ProxyPattern.gif |
为其他对象提供一种代理以控制对这个对象的访问。<<BR>> {{attachment:ProxyPattern.gif}} |
Line 45: | Line 45: |
{{{ | |
Line 46: | Line 47: |
Line 48: | Line 48: |
Line 52: | Line 51: |
Line 54: | Line 52: |
Line 58: | Line 55: |
Line 60: | Line 56: |
Line 64: | Line 59: |
0 }}} |
|
Line 65: | Line 62: |
0 | === 特殊说明 === * 因为在Proxy中没有`__setattr__`函数,因此只可以得到rgb中的值,但不能改变,比如可以`"r = noblue._RBG__red"`,但不能写`"noblue._RBG__red = 255"`,如果要想改变RBG中的值,只有在RBG中定义一些函数如"setBlue...",在noblue中直接调用。 * 在Proxy中也不能定义`__setattr__`,否则在`__init__`中会发生死循环。 |
Line 67: | Line 66: |
}}} 使用: >>> rgb = RGB( 100, 192, 240 ) >>> rgb.Red() 100 >>> proxy = Proxy( rgb ) >>> proxy.Green() 192 >>> noblue = NoBlueProxy( rgb ) >>> noblue.Green() 192 >>> noblue.Blue() 0 === 特殊说明 === * 因为在Proxy中没有__setattr__函数,因此只可以得到rgb中的值,但不能改变,比如可以"r = noblue._RBG__red",但不能写"noblue._RBG__red = 255",如果要想改变RBG中的值,只有在RBG中定义一些函数如"setBlue...",在noblue中直接调用。 * 在Proxy中也不能定义__setattr__,否则在__init__中会发生死循环。 |
=== 反馈 === * 这个看得不是很明白,和java里强制的属性set,get有什么区别? --[[holin| HoLin]] |
-- flyaflya [2005-08-04 09:20:24]
1. Proxy(代理)
1.1. 意图
为其他对象提供一种代理以控制对这个对象的访问。
1.2. 代码
1.3. 例子
使用Proxy改变Blue函数:
使用:
>>> rgb = RGB( 100, 192, 240 ) >>> rgb.Red() 100 >>> proxy = Proxy( rgb ) >>> proxy.Green() 192 >>> noblue = NoBlueProxy( rgb ) >>> noblue.Green() 192 >>> noblue.Blue() 0
1.4. 特殊说明
因为在Proxy中没有__setattr__函数,因此只可以得到rgb中的值,但不能改变,比如可以"r = noblue._RBG__red",但不能写"noblue._RBG__red = 255",如果要想改变RBG中的值,只有在RBG中定义一些函数如"setBlue...",在noblue中直接调用。
在Proxy中也不能定义__setattr__,否则在__init__中会发生死循环。
1.5. 反馈
这个看得不是很明白,和java里强制的属性set,get有什么区别? --HoLin