﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-生活源于奋斗不息 - 不在能知而在能行!!-随笔分类-OOD</title><link>http://www.blogjava.net/site120/category/17953.html</link><description>&lt;span style="position:relative"&gt;
&lt;span  style="font-size:12px; color:#006699;position:absolute;left:100px; top:10px"&gt;机遇与挑战并存 (&lt;script type="text/javascript" src="http://fastonlineusers.com/on4.php?d=http://www.blogjava.net/site120"&gt;&lt;/script&gt;
)&lt;/span&gt;
&lt;/span&gt;</description><language>zh-cn</language><lastBuildDate>Tue, 27 Feb 2007 12:25:15 GMT</lastBuildDate><pubDate>Tue, 27 Feb 2007 12:25:15 GMT</pubDate><ttl>60</ttl><item><title>谈对象之间的关系</title><link>http://www.blogjava.net/site120/archive/2007/01/30/96796.html</link><dc:creator>姜利阳</dc:creator><author>姜利阳</author><pubDate>Tue, 30 Jan 2007 14:02:00 GMT</pubDate><guid>http://www.blogjava.net/site120/archive/2007/01/30/96796.html</guid><wfw:comment>http://www.blogjava.net/site120/comments/96796.html</wfw:comment><comments>http://www.blogjava.net/site120/archive/2007/01/30/96796.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/site120/comments/commentRss/96796.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/site120/services/trackbacks/96796.html</trackback:ping><description><![CDATA[
		<p>对象与对象之间的关系有以下几种关系<br /><strong><font color="#ff1493">   1)继承<br /></font></strong>         1) 一种父子关系<br />         2) 有共同特点 , 或者有普通和特殊关系<br />         3) 如: 一种进化关系, 如: 有机物 --&gt; 蛋白质 --&gt;  微生物 --&gt; 动物 --&gt; 人 <br /><br /><font color="#ff1493"><strong>   2) 依赖<br /></strong></font>         1) 就是一个<strong>对象</strong>调用被依赖对象中的某些方法而得以完成这个<strong>对象</strong>的一些职责<br />         2) 这是一种比较松散的关系 , 并且这是短期的. 我们的过程与对象往往依赖于我们的实体域对象<br />         3) 如: WebWork中的Action 依赖于 业务层中的方法 ,  业务层中的Service或者Bussiness依赖于持久层(DAO)中的方法等等 ( 如果碰到这种关系 , 通常用<strong><u>面向接口编程</u></strong>的方法来处理, 使其具有更好的扩展性, 维护性)<br /><br /><font color="#ff1493"><strong>   3) 关联<br /><br /></strong></font>         1) 指一个类指到另一个类中的属性.<br /><br />         2) 而且是长期的 <br /><br />         3) 关联关系又可以分为以下几种<br />               0) <strong>一般关联</strong>: 只要一个对象联系到另外一个对象就形成了关联关系<br /><br />               1) <strong>聚合关系</strong> , 较强于一般关联 , 有整体与局部之间的关系,并且没有了整体,局部也可单独存在,如小组与小组里面的成员,  小组不存在, 成员也可单独存在 ,  也可加入其它小组, 又如: 一个分子由多个原子按一定的结构,排列组织而成,<strong><u> 在化学变化时(针对原子的操作),按这个角度去看</u></strong> , 原子之间会脱离开,另外合成另一种物质. 其组成关系可以共享<br /><br />               2) <strong>组合关系</strong> , 也叫合成关系 , 是一种更强的整合与局部的关系 , 其关系更加紧密 ., 如: 一个分子由多个原子按一定的结构组织而成, <strong><u>在物理变化中(针对分子的操作), 按这个角度去看</u></strong> , 分子间发生变化 , 变成另一种状态, 但分子结构不变, 还是这种物质. 其组成关系多原子组成结构不可以共享.<br /><br />----------------------------------------------------------------------------------------------------------------</p>
<img src ="http://www.blogjava.net/site120/aggbug/96796.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/site120/" target="_blank">姜利阳</a> 2007-01-30 22:02 <a href="http://www.blogjava.net/site120/archive/2007/01/30/96796.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[设计模式]-----Factory Method模式</title><link>http://www.blogjava.net/site120/archive/2006/12/02/85007.html</link><dc:creator>姜利阳</dc:creator><author>姜利阳</author><pubDate>Sat, 02 Dec 2006 05:59:00 GMT</pubDate><guid>http://www.blogjava.net/site120/archive/2006/12/02/85007.html</guid><wfw:comment>http://www.blogjava.net/site120/comments/85007.html</wfw:comment><comments>http://www.blogjava.net/site120/archive/2006/12/02/85007.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/site120/comments/commentRss/85007.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/site120/services/trackbacks/85007.html</trackback:ping><description><![CDATA[
		<font size="2">
				<strong>一 ,  工厂方法（Factory Method）模式的之定义</strong>
				<br />工厂方法模式的意义就是<font color="#ff1493">定义创建产品对象的工厂接口</font>,将<font color="#ff1493">实际的创建工作交给下一级具体工厂去负责</font>.<br />核心的工厂类不再负责具体产品的创建,这样核心类就成为一个抽象工厂角色,仅仅负责(具体工厂要实现)接口定义.这样进一步抽象的好处就是:工厂方法模式可以使系统在不修改具体工厂角色的情况通过增加新的具体工厂角色下引进新产品.<br /><br /></font>
		<font size="2">
				<strong>二 , 工厂方法模式的角色关系<br /></strong>1) 抽象工厂(Creator)角色:<br />   工厂方法模式的核心,与应用程序相关逻辑无关,任何创建产品对象的具体工厂类都必须实现抽象工厂的接口<br /><br />2) 具体工厂(Concrete Creator)角色:<br /> 实现抽象工厂接口的具体工厂类,包含与应用程序密切相关的逻辑,并且受到应用程序调用以创建该产品对象  <br /><br />3) 抽象产品角色:<br />   工厂方法模式所创建的产品对象,这是一种产口超类,也就是产品对象的共同父类,或者是共同拥有的接口<br /><br />4)  具体产品角色:<br />   这个角色实现了抽象产品所定义的接口,即抽象产品角色的实现类. 具体产品的创建由具体工厂来创建<br /><br /><br /><strong>三 , 示例</strong><br /><strong><font color="#ff1493">1) 抽象工厂角色:</font></strong><br /></font>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<font size="2">
						<span style="COLOR: #008080">1</span> <span style="COLOR: #008000">//</span><span style="COLOR: #008000">抽象工厂角色,工厂模式的核心,定义要生产何种产品! 在这里为该工厂生产手机和CPU</span></font>
				<span style="COLOR: #008000">
						<br />
				</span>
				<font size="2">
						<span style="COLOR: #008080">2</span> <span style="COLOR: #008000"></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">interface</span></font>
				<font size="2">
						<span style="COLOR: #000000">  AbstractFactory<br /></span>
						<span style="COLOR: #008080">3</span> </font>
				<font size="2">
						<span style="COLOR: #000000">{<br /></span>
						<span style="COLOR: #008080">4</span> <span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">public</span></font>
				<font size="2">
						<span style="COLOR: #000000"> Mobile createMobile();<br /></span>
						<span style="COLOR: #008080">5</span> <span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">public</span></font>
				<font size="2">
						<span style="COLOR: #000000"> CPU createCPU();<br /></span>
						<span style="COLOR: #008080">6</span> <span style="COLOR: #000000">}</span></font>
		</div>
		<br />
		<font size="2">
				<strong>
						<font color="#ff1493">2)  具体工厂角色:</font>
				</strong>
				<br />   工厂一:专门生产TCL手机与IntelCPU</font>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<font size="2">
						<span style="COLOR: #008080"> 1</span> <span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> FactoryNO1 </span><span style="COLOR: #0000ff">implements</span></font>
				<font size="2">
						<span style="COLOR: #000000"> AbstractFactory<br /></span>
						<span style="COLOR: #008080"> 2</span> </font>
				<font size="2">
						<span style="COLOR: #000000">{<br /></span>
						<span style="COLOR: #008080"> 3</span> <span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">public</span></font>
				<font size="2">
						<span style="COLOR: #000000"> Mobile createMobile()<br /></span>
						<span style="COLOR: #008080"> 4</span> </font>
				<font size="2">
						<span style="COLOR: #000000">    {<br /></span>
						<span style="COLOR: #008080"> 5</span> <span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span></font>
				<font size="2">
						<span style="COLOR: #000000"> TCLMobile();<br /></span>
						<span style="COLOR: #008080"> 6</span> </font>
				<font size="2">
						<span style="COLOR: #000000">    }<br /></span>
						<span style="COLOR: #008080"> 7</span> <span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">public</span></font>
				<font size="2">
						<span style="COLOR: #000000"> CPU createCPU()<br /></span>
						<span style="COLOR: #008080"> 8</span> </font>
				<font size="2">
						<span style="COLOR: #000000">    {<br /></span>
						<span style="COLOR: #008080"> 9</span> <span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span></font>
				<font size="2">
						<span style="COLOR: #000000"> IntelCPU();<br /></span>
						<span style="COLOR: #008080">10</span> </font>
				<font size="2">
						<span style="COLOR: #000000">    }<br /></span>
						<span style="COLOR: #008080">11</span> </font>
				<font size="2">
						<span style="COLOR: #000000">}<br /></span>
						<span style="COLOR: #008080">12</span> <span style="COLOR: #000000"></span></font>
		</div>
		<br />
		<font size="2">   工厂二:专门生产Nokia手机与ADMCPU<br /></font>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<font size="2">
						<span style="COLOR: #008080"> 1</span> <span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> FactoryNO2 </span><span style="COLOR: #0000ff">implements</span></font>
				<font size="2">
						<span style="COLOR: #000000"> AbstractFactory<br /></span>
						<span style="COLOR: #008080"> 2</span> </font>
				<font size="2">
						<span style="COLOR: #000000">{<br /></span>
						<span style="COLOR: #008080"> 3</span> <span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">public</span></font>
				<font size="2">
						<span style="COLOR: #000000"> Mobile createMobile()<br /></span>
						<span style="COLOR: #008080"> 4</span> </font>
				<font size="2">
						<span style="COLOR: #000000">    {<br /></span>
						<span style="COLOR: #008080"> 5</span> <span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span></font>
				<font size="2">
						<span style="COLOR: #000000"> NOKIAMobile();<br /></span>
						<span style="COLOR: #008080"> 6</span> </font>
				<font size="2">
						<span style="COLOR: #000000">    }<br /></span>
						<span style="COLOR: #008080"> 7</span> <span style="COLOR: #000000">    </span><span style="COLOR: #0000ff">public</span></font>
				<font size="2">
						<span style="COLOR: #000000"> CPU createCPU()<br /></span>
						<span style="COLOR: #008080"> 8</span> </font>
				<font size="2">
						<span style="COLOR: #000000">    {<br /></span>
						<span style="COLOR: #008080"> 9</span> <span style="COLOR: #000000">        </span><span style="COLOR: #0000ff">return</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span></font>
				<font size="2">
						<span style="COLOR: #000000"> AMDCPU();<br /></span>
						<span style="COLOR: #008080">10</span> </font>
				<font size="2">
						<span style="COLOR: #000000">    }<br /></span>
						<span style="COLOR: #008080">11</span> </font>
				<font size="2">
						<span style="COLOR: #000000">}<br /></span>
						<span style="COLOR: #008080">12</span> <span style="COLOR: #000000"></span></font>
		</div>
		<br />
		<font size="2">
				<font color="#ff1493">
						<strong>3) 抽象产品角色</strong>
				</font>
				<br />
		</font>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<font size="2">
						<span style="COLOR: #008080"> 1</span> <span style="COLOR: #008000">//</span><span style="COLOR: #008000">手机产品</span></font>
				<span style="COLOR: #008000">
						<br />
				</span>
				<font size="2">
						<span style="COLOR: #008080"> 2</span> <span style="COLOR: #008000"></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">interface</span></font>
				<font size="2">
						<span style="COLOR: #000000"> Mobile<br /></span>
						<span style="COLOR: #008080"> 3</span> </font>
				<font size="2">
						<span style="COLOR: #000000">{<br /></span>
						<span style="COLOR: #008080"> 4</span> </font>
				<font size="2">
						<span style="COLOR: #000000">}<br /></span>
						<span style="COLOR: #008080"> 5</span> </font>
				<span style="COLOR: #000000">
						<br />
				</span>
				<font size="2">
						<span style="COLOR: #008080"> 6</span> <span style="COLOR: #000000"></span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">CPU产品</span></font>
				<span style="COLOR: #008000">
						<br />
				</span>
				<font size="2">
						<span style="COLOR: #008080"> 7</span> <span style="COLOR: #008000"></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">interface</span></font>
				<font size="2">
						<span style="COLOR: #000000"> CPU<br /></span>
						<span style="COLOR: #008080"> 8</span> </font>
				<font size="2">
						<span style="COLOR: #000000">{<br /></span>
						<span style="COLOR: #008080"> 9</span> </font>
				<font size="2">
						<span style="COLOR: #000000">}<br /></span>
						<span style="COLOR: #008080">10</span> <span style="COLOR: #000000"></span></font>
		</div>
		<br />
		<font size="2">
				<font color="#ff1493">
						<strong>4) 具体产品角色</strong>
				</font>
				<br />
		</font>
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<font size="2">
						<span style="COLOR: #008080"> 1</span> <span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> TCLMobile </span><span style="COLOR: #0000ff">implements</span></font>
				<font size="2">
						<span style="COLOR: #000000"> Mobile<br /></span>
						<span style="COLOR: #008080"> 2</span> </font>
				<font size="2">
						<span style="COLOR: #000000">{<br /></span>
						<span style="COLOR: #008080"> 3</span> </font>
				<font size="2">
						<span style="COLOR: #000000">}<br /></span>
						<span style="COLOR: #008080"> 4</span> </font>
				<span style="COLOR: #000000">
						<br />
				</span>
				<font size="2">
						<span style="COLOR: #008080"> 5</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> NOKIAMobile </span><span style="COLOR: #0000ff">implements</span></font>
				<font size="2">
						<span style="COLOR: #000000"> Mobile<br /></span>
						<span style="COLOR: #008080"> 6</span> </font>
				<font size="2">
						<span style="COLOR: #000000">{<br /></span>
						<span style="COLOR: #008080"> 7</span> </font>
				<font size="2">
						<span style="COLOR: #000000">}<br /></span>
						<span style="COLOR: #008080"> 8</span> </font>
				<span style="COLOR: #000000">
						<br />
				</span>
				<font size="2">
						<span style="COLOR: #008080"> 9</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> IntelCPU </span><span style="COLOR: #0000ff">implements</span></font>
				<font size="2">
						<span style="COLOR: #000000"> CPU<br /></span>
						<span style="COLOR: #008080">10</span> </font>
				<font size="2">
						<span style="COLOR: #000000">{<br /></span>
						<span style="COLOR: #008080">11</span> </font>
				<font size="2">
						<span style="COLOR: #000000">}<br /></span>
						<span style="COLOR: #008080">12</span> </font>
				<span style="COLOR: #000000">
						<br />
				</span>
				<font size="2">
						<span style="COLOR: #008080">13</span> <span style="COLOR: #000000"></span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> AMDCPU </span><span style="COLOR: #0000ff">implements</span></font>
				<font size="2">
						<span style="COLOR: #000000"> CPU<br /></span>
						<span style="COLOR: #008080">14</span> </font>
				<font size="2">
						<span style="COLOR: #000000">{<br /></span>
						<span style="COLOR: #008080">15</span> <span style="COLOR: #000000">}</span></font>
		</div>
		<br />
		<strong>
				<font color="#ff1493" size="2">5) 使用</font>
		</strong>
		<br />
		<div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee">
				<span style="COLOR: #008080">1</span> <span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> TestFactoryMothod<br /></span><span style="COLOR: #008080">2</span> <span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">3</span> <span style="COLOR: #000000">    AbstractFactory factory </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> FactoryNo1();<br /></span><span style="COLOR: #008080">4</span> <span style="COLOR: #000000">    Mobile tCLMobile </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> factory.createMobile(); <br /></span><span style="COLOR: #008080">5</span> <span style="COLOR: #000000">    </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000"> <img src="http://www.blogjava.net/images/dot.gif" /></span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">6</span> <span style="COLOR: #008000"></span><span style="COLOR: #000000">}</span></div>
		<br />
		<font color="#ff1493">
				<strong>总结：</strong>
		</font>
		<br />   <font color="#000000" size="2">工厂方法模式四种角色，当系统扩展需要添加引进新产品时，仅仅需要添加一个具体产品及具体工厂类即可，原有的工厂对象不用去修改它，这也符合了ＯＣＰ开闭原则,对扩展开放，对修改关闭.<br /><br /></font><p style="FONT-WEIGHT: normal; FONT-SIZE: 10px; LINE-HEIGHT: normal; FONT-STYLE: normal; FONT-VARIANT: normal" align="right">参考: http://dev.yesky.com/48/2483548.shtml</p><img src ="http://www.blogjava.net/site120/aggbug/85007.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/site120/" target="_blank">姜利阳</a> 2006-12-02 13:59 <a href="http://www.blogjava.net/site120/archive/2006/12/02/85007.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>[设计模式]-----代理模式</title><link>http://www.blogjava.net/site120/archive/2006/11/30/84671.html</link><dc:creator>姜利阳</dc:creator><author>姜利阳</author><pubDate>Thu, 30 Nov 2006 14:36:00 GMT</pubDate><guid>http://www.blogjava.net/site120/archive/2006/11/30/84671.html</guid><wfw:comment>http://www.blogjava.net/site120/comments/84671.html</wfw:comment><comments>http://www.blogjava.net/site120/archive/2006/11/30/84671.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.blogjava.net/site120/comments/commentRss/84671.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/site120/services/trackbacks/84671.html</trackback:ping><description><![CDATA[
		<font color="#ff0000" size="2">
				<font color="#800080">
						<strong>
								<font color="#000000">一 , 代理的定义<br /></font>
						</strong>
						<br />代理模式在设计模式中的定义</font>: 为其它对象提供一种代理以控制对这个对象的访问<br /><font color="#000000">在一些情况之下客户不想或者不能直接引用一个对象,而代理对象可以在客户和目标对象之间起到了<strong>中介作用</strong>,<br />屏蔽客户不能看到的内容,服务或者添加客户需要的额外的服务<br /><br />那在什么情况下使用代理模式呢?对原有方法使用时出现需要对原有方法进行修改,这时有两种改进方法:<br /><br /><font color="#006400">   1) 修改原有方法以适应现在的使用方式.<br />   2) 使用"第三者"方法来调用原有方法并且对原有方法产生的结果进行控制.</font><font color="#ffc0cb"><br /></font><br />第一种方法明显违背了<strong>开闭原则(对扩展开放,对修改关闭),</strong> 而且在原有的方法当中修改可能使得原有类的功能变得模糊和多元化<br />而使用第二种方法则将功能划分得更加清晰,有助于后面的维护.在一定的程度上选择第二种更加合适.<br /><br /><strong>二 , 代理的分类<br /></strong><br />根据&lt;Java与模式&gt;对代理的分类,常见的代理有:<br />1) 远程代理(Remote proxy) : 对一个位于不同的地址空间对象提供一个局域代表对象.如: 你可以将一个在世界某个角落中的计算机通过代理假象成你局域网的一个对象.<br /><br />2) 虚拟代理(Virtual proxy): 根据需要将一个资源消耗很大或者比较复杂的对象,延迟加载,在真正需要的时候才创建.如一张很大的图片,需要很长的时间才能显示出来,那么当这个图片包含在文档当中时,用浏览器或者其它编辑器打开时,大图片可能影响了文档的阅读,这时就需要用一个图片Proxy来代替这个图片.<br /><br />3) 保护代理(Protect or Access Proxy): 控制对一个对象的访问权限,比如在windows操作系统的用户在登陆系统时,普通用户和系统管理员,能做什么,不能做什么,拥有的权限是不一样的,使用代理模式可以控制权限.<br /><br />4) 智能引用(Smart Reference Proxy):  提供比目标对象额外的服务,功能.如: 计数器.....提供一些友情提示...<br /><br /><strong>三 , 结构</strong><br /><br />代理模式中的"代理"要想实现代理任务,就必须和被代理的目标对象使用共同的接口,比如说产品代理商要能够销售厂家的产品(共同的接口:厂家的销售部门也能够销售产品). 那么在Java当中使用抽象类或者接口来实现这个共同的接口. <br /><br />那么代理模式就有三个角色组成了: <br /><br />1) 抽象主题角色: 声明了真实主题和代理主题共同的接口<br /><br />2) 代理主题角色: 内部包含了对真实主题的引用,并且提供对真实主题的角色的相同接口.<br /><br />3) 真实主题角色: 定义真实的对象<br /><br />它们之间的关系如下:<br /><br />                     抽象主题角色<br />                     |                      |<br />          代理主题   ---&gt;   真实主题<br /><br />这时,大家已经对代理模式应该有一个宏观的认识.<br /><br /><strong>四 , 举例</strong><br /><br />以windows操作系统中用户 ,  系统管理员具有添加用户功能,而普通用户则不行.<br /><br />1) 抽象主题角色: IUserManager<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">1</span> <span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">interface</span><span style="COLOR: #000000"> IUserManager<br /></span><span style="COLOR: #008080">2</span> <span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">3</span> <span style="COLOR: #000000">     </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> addUser(User user);<br /></span><span style="COLOR: #008080">4</span> <span style="COLOR: #000000">}</span></div><br />2)  真实主题角色: UserManager<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080">1</span> <span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> UserManagerImpl </span><span style="COLOR: #0000ff">implements</span><span style="COLOR: #000000"> IUserManager<br /></span><span style="COLOR: #008080">2</span> <span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080">3</span> <span style="COLOR: #000000">     </span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> addUser(User user)<br /></span><span style="COLOR: #008080">4</span> <span style="COLOR: #000000">     {<br /></span><span style="COLOR: #008080">5</span> <span style="COLOR: #000000">        </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">TODO 实现代码</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">6</span> <span style="COLOR: #008000"></span><span style="COLOR: #000000">     }<br /></span><span style="COLOR: #008080">7</span> <span style="COLOR: #000000">}</span></div><br />3) 代理主题角色: UserManagerProxy<br /><div style="BORDER-RIGHT: #cccccc 1px solid; PADDING-RIGHT: 5px; BORDER-TOP: #cccccc 1px solid; PADDING-LEFT: 4px; FONT-SIZE: 13px; PADDING-BOTTOM: 4px; BORDER-LEFT: #cccccc 1px solid; WIDTH: 98%; WORD-BREAK: break-all; PADDING-TOP: 4px; BORDER-BOTTOM: #cccccc 1px solid; BACKGROUND-COLOR: #eeeeee"><span style="COLOR: #008080"> 1</span> <span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">class</span><span style="COLOR: #000000"> UserManagerProxy </span><span style="COLOR: #0000ff">implements</span><span style="COLOR: #000000"> IUserManager <br /></span><span style="COLOR: #008080"> 2</span> <span style="COLOR: #000000">{<br /></span><span style="COLOR: #008080"> 3</span> <span style="COLOR: #000000">　</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> IUserManager userManager;<br /></span><span style="COLOR: #008080"> 4</span> <span style="COLOR: #000000">　</span><span style="COLOR: #0000ff">private</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> permission ; </span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">权限值</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080"> 5</span> <span style="COLOR: #008000"></span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080"> 6</span> <span style="COLOR: #000000">　</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> UserManangerProxy(</span><span style="COLOR: #0000ff">int</span><span style="COLOR: #000000"> permission)<br /></span><span style="COLOR: #008080"> 7</span> <span style="COLOR: #000000">　{<br /></span><span style="COLOR: #008080"> 8</span> <span style="COLOR: #000000">　　userManager </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">new</span><span style="COLOR: #000000"> UserManagerImpl() <br /></span><span style="COLOR: #008080"> 9</span> <span style="COLOR: #000000">　　</span><span style="COLOR: #0000ff">this</span><span style="COLOR: #000000">.permission </span><span style="COLOR: #000000">=</span><span style="COLOR: #000000"> permission ;<br /></span><span style="COLOR: #008080">10</span> <span style="COLOR: #000000">　}<br /></span><span style="COLOR: #008080">11</span> <span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">12</span> <span style="COLOR: #000000">　</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">实现的接口</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">13</span> <span style="COLOR: #008000"></span><span style="COLOR: #000000">　</span><span style="COLOR: #0000ff">public</span><span style="COLOR: #000000"> </span><span style="COLOR: #0000ff">void</span><span style="COLOR: #000000"> addUser(User user)<br /></span><span style="COLOR: #008080">14</span> <span style="COLOR: #000000">　{<br /></span><span style="COLOR: #008080">15</span> <span style="COLOR: #000000">　　</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">满足权限设置的时候才能够执行操作<br /></span><span style="COLOR: #008080">16</span> <span style="COLOR: #008000">　　</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">Constants是一个常量类</span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">17</span> <span style="COLOR: #008000"></span><span style="COLOR: #000000">　　</span><span style="COLOR: #0000ff">if</span><span style="COLOR: #000000">(Constants.ASSOCIATOR </span><span style="COLOR: #000000">==</span><span style="COLOR: #000000"> permission)<br /></span><span style="COLOR: #008080">18</span> <span style="COLOR: #000000">　　{<br /></span><span style="COLOR: #008080">19</span> <span style="COLOR: #000000">　　　userManager.addUser(user);<br /></span><span style="COLOR: #008080">20</span> <span style="COLOR: #000000">　　}<br /></span><span style="COLOR: #008080">21</span> <span style="COLOR: #000000">　　</span><span style="COLOR: #0000ff">else</span><span style="COLOR: #000000"><br /></span><span style="COLOR: #008080">22</span> <span style="COLOR: #000000">　　{<br /></span><span style="COLOR: #008080">23</span> <span style="COLOR: #000000">　　　　</span><span style="COLOR: #008000">//</span><span style="COLOR: #008000">TODO 提示出错信息 </span><span style="COLOR: #008000"><br /></span><span style="COLOR: #008080">24</span> <span style="COLOR: #008000"></span><span style="COLOR: #000000">　　}　　　　　<br /></span><span style="COLOR: #008080">25</span> <span style="COLOR: #000000">}</span></div></font></font>
		<p align="left">
				<br />
				<font size="2">这样就实现了简单的代理模式功能...当然根据实际情况,我们也可以自定义一些额外的功能..<br /><br /><strong>五 , 总结</strong><br />代理模式能够协调调用者和被调用者,能够在一定程度上降低系统的耦合程度,当然实际当中要视当前的实际情况而定<br /><br /><br /></font>
		</p>
		<p align="right">
				<font size="1">-----参考:http://www.yesky.com/412/1919412.shtml</font>
		</p>
<img src ="http://www.blogjava.net/site120/aggbug/84671.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/site120/" target="_blank">姜利阳</a> 2006-11-30 22:36 <a href="http://www.blogjava.net/site120/archive/2006/11/30/84671.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>