??xml version="1.0" encoding="utf-8" standalone="yes"?>午夜国产在线,亚洲欧洲二区,中文字幕久热精品在线视频http://www.aygfsteel.com/uhlanxie/category/23951.htmlzh-cnMon, 03 Sep 2007 05:48:11 GMTMon, 03 Sep 2007 05:48:11 GMT60设计模式: 创徏型模式概?/title><link>http://www.aygfsteel.com/uhlanxie/archive/2007/09/01/141970.html</link><dc:creator>10:10</dc:creator><author>10:10</author><pubDate>Sat, 01 Sep 2007 10:33:00 GMT</pubDate><guid>http://www.aygfsteel.com/uhlanxie/archive/2007/09/01/141970.html</guid><wfw:comment>http://www.aygfsteel.com/uhlanxie/comments/141970.html</wfw:comment><comments>http://www.aygfsteel.com/uhlanxie/archive/2007/09/01/141970.html#Feedback</comments><slash:comments>2</slash:comments><wfw:commentRss>http://www.aygfsteel.com/uhlanxie/comments/commentRss/141970.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/uhlanxie/services/trackbacks/141970.html</trackback:ping><description><![CDATA[     摘要: 模式q用的基本方法,步骤 <br>5U创模式的q用条gQ解决之道,Java中的q用 <br>思维导图描述Q呵?nbsp; <a href='http://www.aygfsteel.com/uhlanxie/archive/2007/09/01/141970.html'>阅读全文</a><img src ="http://www.aygfsteel.com/uhlanxie/aggbug/141970.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/uhlanxie/" target="_blank">10:10</a> 2007-09-01 18:33 <a href="http://www.aygfsteel.com/uhlanxie/archive/2007/09/01/141970.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item><item><title>Refactoring To PatternsQ?观察者模?/title><link>http://www.aygfsteel.com/uhlanxie/archive/2007/07/10/129170.html</link><dc:creator>10:10</dc:creator><author>10:10</author><pubDate>Mon, 09 Jul 2007 16:11:00 GMT</pubDate><guid>http://www.aygfsteel.com/uhlanxie/archive/2007/07/10/129170.html</guid><wfw:comment>http://www.aygfsteel.com/uhlanxie/comments/129170.html</wfw:comment><comments>http://www.aygfsteel.com/uhlanxie/archive/2007/07/10/129170.html#Feedback</comments><slash:comments>3</slash:comments><wfw:commentRss>http://www.aygfsteel.com/uhlanxie/comments/commentRss/129170.html</wfw:commentRss><trackback:ping>http://www.aygfsteel.com/uhlanxie/services/trackbacks/129170.html</trackback:ping><description><![CDATA[<span style="font-size: 12pt; color: #080000;">   <span style="color: #1600b0;"> 常听说这么一句话(大意是这?Q不必可以去套用设计模式Q如果按照面向对象的基本原则~程Q自然是优雅的设计,即没有L使用模式Q设计也会近乎于? 式。开始感觉有一点玄Q但在看了?/span></span><span style="color: #1600b0;">C#设计模式U|谈》视频后Q觉得有所收获</span><span style="font-size: 12pt; color: #1600b0;">。下面,参?/span><span style="color: #1600b0;">视频</span><span style="font-size: 12pt; color: #1d06c0;"><span style="color: #080000;"><span style="color: #1600b0;">的内容,试着写这么一个过E:Ҏ面向对象的一般原则对设计q行重构Q逐渐演化察者模式?/span><br style="color: #1600b0;"><span style="color: #1600b0;">涉及的面 向对象设计原则:<span style="color: #049a0e;">单一职责原则、封装变化、面向接口编E、依赖倒置原则、开闭原则?/span></span><br style="color: #1600b0;"><br><span style="color: #1600b0;">1.发布订阅模型Q? </span></span><br><br><img src="http://www.aygfsteel.com/images/blogjava_net/uhlanxie/ObModel.JPG" alt="" height="294" width="333"><br>          <br>                <br>假如有需求如?<br><br>银行需要把帐户的如汇款、{账或取款{操作通知用户Q途径包括手机短信? email{。如图所式?br><br>自然圎ͼ我们可以q样做:<br><br> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #008080;"></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;"> ATM<br> {<br>     BankAccount bankAccount;<br>     <br>     </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">void</span><span style="color: #000000;"> process()<br>     {<br>          </span><span style="color: #008000;">//</span><span style="color: #000000;">bankAccount...</span><br><span style="color: #000000;">         </span><span style="color: #0000ff;">this</span><span style="color: #000000;">.sendEmail(userEmail);<br>         </span><span style="color: #0000ff;">this</span><span style="color: #000000;">.sendPhone(phoneNumber);<br>     }<br> <br>     </span><span style="color: #0000ff;">private</span><span style="color: #000000;"> </span><span style="color: #0000ff;">void</span><span style="color: #000000;"> sendEmail(String userEmail)<br>     {<br>         </span><span style="color: #008000;">//<br></span><span style="color: #000000;">     }<br><br>    </span><span style="color: #0000ff;">private</span><span style="color: #000000;"> </span><span style="color: #0000ff;">void</span><span style="color: #000000;"> sendMobile(String phoneNumber)<br>     {<br>         </span><span style="color: #008000;">//<br></span><span style="color: #000000;">     }<br> }</span> <span style="color: #000000;"></span></div> <br>ATM机的 process()Ҏ在处理完业务逻辑后,由email和phone通知用户?br><br><span style="color: #1600b0;">2.初步重构</span><br><br>好像有bad smellsQ恩Q根?span style="color: #049a0e;">单一职责原则</span>。新增EmailcdPhonec,q把相关业务逻辑改到BankAccountcd 成。于是我们的代码可以q样Q?br><br> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #000000;"><br></span><span style="color: #0000ff;"></span><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">class</span><span style="color: #000000;"> ATM<br>{<br>    BankAccount bankAccount;<br>    <br>    <br>    </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">void</span><span style="color: #000000;"> process()<br>    {<br>          </span><span style="color: #008000;">//</span><span style="color: #008000;"><img src="http://www.aygfsteel.com/Images/dot.gif"></span><span style="color: #008000;"><br></span><span style="color: #000000;">          bankAccount.withDraw();<br>    }<br> <br> }<br><br></span><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">class</span><span style="color: #000000;"> BankAccount <br>{<br>    Email email;<br>    Mobile mobile;<br><br>    </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">void</span><span style="color: #000000;"> withDraw()<br>    {<br>         </span><span style="color: #008000;">//</span><span style="color: #008000;"><img src="http://www.aygfsteel.com/Images/dot.gif"></span><span style="color: #008000;"><br></span><span style="color: #000000;">         email.sendEmail(userEmail);<br>         mobile.sendMobile(phoneNumber);<br>    }<br>}<br><br></span><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">class</span><span style="color: #000000;"> Email<br>{<br>    </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">void</span><span style="color: #000000;"> sendEmail(String userEmail)<br>    {<br>    }<br>}<br><br></span><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">class</span><span style="color: #000000;"> Mobile<br>{<br>    </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">void</span><span style="color: #000000;"> sendMobile(String phoneNumber)<br>    {<br>    }<br>}</span> <span style="color: #000000;"></span></div> <br>下面是代码的UML图:<br><br><img src="http://www.aygfsteel.com/images/blogjava_net/uhlanxie/initMap.JPG" alt="" height="274" width="332"><br><br><br><span style="color: #1600b0;">3.拥抱变化</span><br><br>q个解决Ҏ有问题吗?可能没有问题。它? C我们的需求:在帐h操作变动的时候,通知Email和Mobiled送信息给用户。但q样设计p够了吗?可能_了,可能q不够?br>考虑如下两种情况Q?br>1.在很长一D|间里Q订阅方式很E_Q比如系l只通过邮g和手机短信进行信息订阅,那么q个实现? 有太大问题;<br>2.在近一两年或更短的旉Q更多的订阅方式会源源不断地被加进来:比如可以d官方|站{等Q那q个实现有问题Q? 再看一下我们的UML图,cBankAccount依赖于Email和Mobilec!是_如果需要添加新的订阅方式ATMcȝprocess()? 法势必要重新设计Q?br><br>于是我们的BankAccountcM得不变成Q?br><br> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">class</span><span style="color: #000000;">  BankAccount<br>{<br>    Email email;<br>    Mobile mobile;<br>    Web web;<br><br>    </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">void</span><span style="color: #000000;"> withDraw()<br>    {<br>          </span><span style="color: #008000;">//<br></span><span style="color: #000000;">         email.sendEmail(userEmail);<br>         mobile.sendMobile(phoneNumber);<br>         web.sendWeb(webSite);<br>    }<br> <br> }</span></div> <br>如果q有另一U方式,那么process()Ҏ又会需要加入:otherSubscribe.send...();{方法,另外 如果订阅cȝ接口(q里指sendEmail{方?发生变化QBankAccount的withDraw()Ҏ也必L相应的变化!q当然是U灾难? 我们必须改变q种情况?br>先解决遗留问题:W一U情况:订阅方式相对E_的情况下呢?不改动会产生N吗?<br>个h? 为:不会。比如某个系l信息只通过手机短信订阅Q那没有必要太在意q个问题。考虑周全一点不好吗Q如果将来有cM需求呢Q小?span style="color: red;">q度设计</span>Qؓ了将来可能出现需求而进行的预先设计q不太好。有需求,才有设计?br> <br>现在来看解决之道Q?br><br>q用面向对象的思想Q抽象出问题所在。BankAccountcM赖于 EmailcdMobilec,而Email和Mobile是具体的c,<span style="color: red;">ATM依赖于具体的c?/span>了,而且q不止一个!回忆一?span style="color: #2000ff;"><span style="color: #049a0e;">依赖倒置原则Q具体应该依赖于抽象Q底层模式应该依赖于高层模式</span>?/span>那怎么实现<span style="color: #049a0e;">依赖倒置原则</span>?面向对象~程中有一条ȝ原则Q?span style="color: #049a0e;">装变化</span>。如何实?span style="color: #049a0e;">装变化</span>Q需要我们这P<span style="color: red;"><span style="color: #2000ff;"><span style="color: #049a0e;">面向接口~程</span>?/span><br><br><span style="color: #008420;">回顾一下:我们在设计中实现cM赖了具体的类Q违反了依赖倒置原则。ؓ了遵循依赖倒置原则Q我们采用面向接口编E的ҎQ从? 实现了面向对象的一条ȝ原则Q封装变化?/span></span><span style="color: red;"></span><br><span style="color: red;"><br><span style="color: #1600b0;">看代码:</span><br><br> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">interface</span><span style="color: #000000;"> AccountObserver<br>{<br>    </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">void</span><span style="color: #000000;"> upDate(UserAccount userAccount);<br>}<br><br></span><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">class</span><span style="color: #000000;"> Email implements AccountObserver<br>{<br>    </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">void</span><span style="color: #000000;"> upDate(UserAccount userAccount)<br>    {<br>    }<br>}<br><br></span><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">class</span><span style="color: #000000;"> Mobile<br>{<br>    </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">void</span><span style="color: #000000;"> upDate(UserAccount userAccount)<br>    {<br>    }<br>}<br><br></span><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">class</span><span style="color: #000000;"> BankAccount <br>{<br>    List </span><span style="color: #000000;"><</span><span style="color: #000000;">AccountObserver</span><span style="color: #000000;">></span><span style="color: #000000;"> observer </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> ArrayList</span><span style="color: #000000;"><</span><span style="color: #000000;">AccountObserver</span><span style="color: #000000;">></span><span style="color: #000000;">;<br><br>    </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">void</span><span style="color: #000000;"> withDraw()<br>    {<br>         </span><span style="color: #008000;">//<br></span><span style="color: #000000;">         </span><span style="color: #0000ff;">for</span><span style="color: #000000;"> (AccountObserver ao : observer)<br>         {<br>            ao.upDate(userAccount)<br>          }<br>    }<br>    <br>    </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">void</span><span style="color: #000000;"> addOberver(AccountObserver accountObserver)<br>    {<br>          observer.add(accountObserver);<br>     }<br>}<br></span></div> <br></span>UML图:<br><br><img src="http://www.aygfsteel.com/images/blogjava_net/uhlanxie/downToUpu.JPG" alt=""> <br><br>现在QBankAccount依赖于interface AccountObserver。Email和Mobile实现AccountObserver接口?span style="color: #049a0e;">通过遵@面向接口~程</span>遵@?span style="color: #049a0e;">依赖倒置原则</span><span style="color: red;"><span style="color: #049a0e;">?/span><br><br></span><span style="color: #1600b0;">4.开闭原?/span><br><br>l于修改好了Q我们解决了订阅者变化的? 题。但如果发布者也們֐于变化呢Q这q涉到面向对象里的另一个原则:<span style="color: #049a0e;">开闭原?/span>?span style="color: #049a0e;">卻IҎ展开放,对修改关闭?/span>具体怎么做呢Q通过抽象c,从抽象类l承具体cR?br>看最l的代码(只写几个关键的方法,全貌可看最后的UML?Q?br><br>订阅Q? <br><br> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; background-color: #eeeeee; font-size: 13px; width: 98%;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">interface</span><span style="color: #000000;"> AccountObserver<br>{<br>    </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">void</span><span style="color: #000000;"> upDate(UserAccount userAccount);<br>}<br><br></span><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">class</span><span style="color: #000000;"> Email </span><span style="color: #0000ff;">implements</span><span style="color: #000000;"> AccountObserver<br>{<br>    </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">void</span><span style="color: #000000;"> upDate(UserAccount userAccount)<br>    {<br>    }<br>}<br><br></span><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">class</span><span style="color: #000000;"> Mobile </span><span style="color: #0000ff;">implements</span><span style="color: #000000;"> AccountObserver<br>{<br>    </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">void</span><span style="color: #000000;"> upDate(UserAccount userAccount)<br>    {<br>    }<br>}</span></div> <br><br>发布Q?br><br> <div style="border: 1px solid #cccccc; padding: 4px 5px 4px 4px; font-size: 13px; width: 98%; background-color: #eeeeee;"><!--<br><br>Code highlighting produced by Actipro CodeHighlighter (freeware)<br>http://www.CodeHighlighter.com/<br><br>--><span style="color: #0000ff;"></span><span style="color: #0000ff;"></span><span style="color: #000000;"><br><br></span><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">abstract</span><span style="color: #000000;"> </span><span style="color: #0000ff;">class</span><span style="color: #000000;"> Subject<br>{<br>     List </span><span style="color: #000000;"><</span><span style="color: #000000;">AccountObserver</span><span style="color: #000000;">></span><span style="color: #000000;"> observer </span><span style="color: #000000;">=</span><span style="color: #000000;"> </span><span style="color: #0000ff;">new</span><span style="color: #000000;"> ArrayList</span><span style="color: #000000;"><</span><span style="color: #000000;">AccountObserver</span><span style="color: #000000;">></span><span style="color: #000000;">;<br><br>    </span><span style="color: #0000ff;">protected</span><span style="color: #000000;"> </span><span style="color: #0000ff;">void</span><span style="color: #000000;"> withDraw()<br>    {<br>         </span><span style="color: #008000;">//<br></span><span style="color: #000000;">         notify();<br>         <br>    }<br>    <br>    </span><span style="color: #0000ff;">protected</span><span style="color: #000000;"> </span><span style="color: #0000ff;">void</span><span style="color: #000000;"> notify(UserAccount userAccount)<br>    {<br>         </span><span style="color: #0000ff;">for</span><span style="color: #000000;"> (AccountObserver ao : observer)<br>         {<br>            ao.upDate(userAccount)<br>          }<br>     }<br>    <br>    </span><span style="color: #0000ff;">protected</span><span style="color: #000000;"> </span><span style="color: #0000ff;">void</span><span style="color: #000000;"> addOberver(AccountObserver accountObserver)<br>    {<br>          observer.add(accountObserver);<br>     }<br><br>      </span><span style="color: #0000ff;">protected</span><span style="color: #000000;"> </span><span style="color: #0000ff;">void</span><span style="color: #000000;"> deleteOberver(AccountObserver accountObserver)<br>    {<br>          observer.remove(accountObserver);<br>     }<br><br>}<br><br></span><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">class</span><span style="color: #000000;"> BankAccount </span><span style="color: #0000ff;">extends</span><span style="color: #000000;"> Subject<br>{<br>    </span><span style="color: #0000ff;">public</span><span style="color: #000000;"> </span><span style="color: #0000ff;">void</span><span style="color: #000000;"> withDraw()<br>    {<br>         </span><span style="color: #008000;">//<br></span><span style="color: #000000;">         </span><span style="color: #0000ff;">for</span><span style="color: #000000;"> (AccountObserver ao : observer)<br>         {<br>            ao.upDate(userAccount)<br>          }<br>    }<br>    <br>}</span><br><span style="color: #0000ff;"></span><br><span style="color: #000000;"></span></div> <br>看UML图:<br><br><img src="http://www.aygfsteel.com/images/blogjava_net/uhlanxie/openClosePrincipleu.JPG" alt=""><br><br><br><span style="color: #1600b0;">5.观察者模式概?/span><br style="color: #1600b0;"><br><br><img src="http://www.aygfsteel.com/images/blogjava_net/uhlanxie/Observer.JPG" alt=""> <br><br>q就是观察者模式了Q对比一下官方的UML图,是不是一目了然了呢?<br>E作说明(q里的依? 都是指广义的依赖)Q?br>1.被观察者ConcreteSubjectl承自Subject抽象c;<br> 2.Subject抽象cM赖于观察者Observer抽象接口Q?br>3.观察者ConcreteObserver实现Observer 接口Q?br>4.观察者ConcreteObserver间接依赖于ConcreteSubjectcR?br>如果要增加具体的观察者,只要再实现Obsever接口卛_Q而被观察方不需要做M修改。而如果需要修改被观察者,只要从Subject? 象类l承卛_?br> </span> <img src ="http://www.aygfsteel.com/uhlanxie/aggbug/129170.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.aygfsteel.com/uhlanxie/" target="_blank">10:10</a> 2007-07-10 00:11 <a href="http://www.aygfsteel.com/uhlanxie/archive/2007/07/10/129170.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <a href="http://www.aygfsteel.com/" title="狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频">狠狠久久亚洲欧美专区_中文字幕亚洲综合久久202_国产精品亚洲第五区在线_日本免费网站视频</a> </div> </footer> վ֩ģ壺 <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ұ</a>| <a href="http://" target="_blank">ɳ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ٸ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ĵ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">²</a>| <a href="http://" target="_blank">¦</a>| <a href="http://" target="_blank">Ϫ</a>| <a href="http://" target="_blank">ĺ</a>| <a href="http://" target="_blank">¡</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ƽ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">ԫ</a>| <a href="http://" target="_blank">¡</a>| <a href="http://" target="_blank">½</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">̩</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Զ</a>| <a href="http://" target="_blank">˳</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">Ȫ</a>| <a href="http://" target="_blank"></a>| <a href="http://" target="_blank">޽</a>| <a href="http://" target="_blank">ԭƽ</a>| <a href="http://" target="_blank">÷</a>| <a href="http://" target="_blank">¡</a>| <script> (function(){ var bp = document.createElement('script'); var curProtocol = window.location.protocol.split(':')[0]; if (curProtocol === 'https') { bp.src = 'https://zz.bdstatic.com/linksubmit/push.js'; } else { bp.src = 'http://push.zhanzhang.baidu.com/push.js'; } var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(bp, s); })(); </script> </body>