??xml version="1.0" encoding="utf-8" standalone="yes"?>国产精品一区二区久久精品涩爱 ,97精品国产97久久久久久免费,国产精品xxxx国产喷水亚洲国产精品无码久久一区 http://www.shnenglu.com/iuranus/category/4276.html<br><font color="#ADFF2F">Something DifferentQSomething New</font>zh-cnMon, 23 Feb 2009 05:04:01 GMTMon, 23 Feb 2009 05:04:01 GMT60Command Pattern: We used but we didn't recognizehttp://www.shnenglu.com/iuranus/archive/2009/02/20/74451.html攀?/dc:creator>攀?/author>Fri, 20 Feb 2009 13:00:00 GMThttp://www.shnenglu.com/iuranus/archive/2009/02/20/74451.htmlhttp://www.shnenglu.com/iuranus/comments/74451.htmlhttp://www.shnenglu.com/iuranus/archive/2009/02/20/74451.html#Feedback2http://www.shnenglu.com/iuranus/comments/commentRss/74451.htmlhttp://www.shnenglu.com/iuranus/services/trackbacks/74451.html
        Class A wanna class B do what he want to (command). Simple way, invoke B's method, that's a good idea, but don't follow the OO principle: decouple

How to do it?  

        Firstly, B is a stable class; he can in charge of all his responsibility. Maybe there are too many classes like B that A wants to invoke. So how to do it, A composition or aggregation all classes that he needs? Of course not, too much dependence with A. So let’s think about this with OO principle: Encapsulate What Varies.
 

       There are many unpredictable commands that are the variety in this case. We need to encapsulate the command and plugin to A. So at that time, A just knows he is invoking a command, and doesn’t know who and how to execute that command.

       Secondly, how to plugin to A. I don’t wanna talk about DI or Java mechanism. I am handling C++, so just add a method named SetCommand(Command* pCommand) to A, that's fine.

       Lastly, I showed a UML figure 1-1 that described all the means.

     

                                                                Figure 1-1 
       
Everybody’ll shout: that is command pattern.  Yes.

        As the title said: we used but we didn't recognize. So let’s start with its official definition:

        The Command Pattern encapsulate a request as an object, thereby letting you parameterize other objects with different request, queue or log requests, and support undoable operations.



]]>
模式应用(? 俄罗斯方块设计的思?用OO的思想http://www.shnenglu.com/iuranus/archive/2008/12/28/70593.html攀?/dc:creator>攀?/author>Sun, 28 Dec 2008 15:36:00 GMThttp://www.shnenglu.com/iuranus/archive/2008/12/28/70593.htmlhttp://www.shnenglu.com/iuranus/comments/70593.htmlhttp://www.shnenglu.com/iuranus/archive/2008/12/28/70593.html#Feedback16http://www.shnenglu.com/iuranus/comments/commentRss/70593.htmlhttp://www.shnenglu.com/iuranus/services/trackbacks/70593.html         大学的时候看同学用C写的俄罗斯方块,今天?j)血来潮Q突然想设计下用OO的思想来设计下。俄|斯方块是一以前俄罗斯的计算机科学家自己开发娱乐的游戏,没想到后来这么流行?br>
        像俄|斯QTetrisQ方块,q宫Q推子q种游戏,其实建模都差不多Q这里我选择一?l数l?0×20的来代表整个游戏区域的显C点,0代表该位|空Q?代表有方块?每一个数l|a[2][4]Q代表屏q上的一个像素,数组cM于:(x)
        a[20][10] = { {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
                              {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
                              {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
                              {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
                              {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
                              {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
                              {0, 0, 0, 0, 0, 0, 0, 0, 0, 0},
                              .........................................
                           }      
         q里有几个简单的判断Q?br>         1. 判断是不是方块撞到墙上,是看a[i-1]中i-1是不?lt;0或i+1是不?gt;10;
         2. 判断一层能不能clearQ?是每行是不是数l值都?
            int k = 0; 
            for(int i=0; i<20; i++){
                for(int j = 0; j<10; j++){
                     if(a[i][j] == 1)
                            k++;
               }
               if(k==10)
                   ClearRow(i);   //把数l第i行全|?
           }
           3......其它的判断类?br>
            好,具体的设计思想参考图1-1
             

                                                                                       ?-1      

         
         在游戏操作中Q有六个键, 上下左右Q左x转, 该图中Form是边界类与UI和用h制打交道QHandler业务控制c, ManageArray操作singleton数组和控制一些比较复杂算法的cR?br>
         首先该设计把整个业务法{等从界面分dQ不你用什么Iphone的UI的SDKq是android的, 都没问题?nbsp;他们只与我们的UIForm打交道?br>         再次q边的Singleton模式把数l暴露给惌他的E序?br>         最后用{略模式把旋转的法分开Q每个算法只兛_(j)自己怎么变化Q想扩展加一个类Q如果一个算法要修改Q那么只修改某一个方法。开闭原则?br>           
         望各位博友指?br>   
      

]]>
模式应用(一) 软g架构http://www.shnenglu.com/iuranus/archive/2007/12/10/38189.html攀?/dc:creator>攀?/author>Mon, 10 Dec 2007 11:32:00 GMThttp://www.shnenglu.com/iuranus/archive/2007/12/10/38189.htmlhttp://www.shnenglu.com/iuranus/comments/38189.htmlhttp://www.shnenglu.com/iuranus/archive/2007/12/10/38189.html#Feedback4http://www.shnenglu.com/iuranus/comments/commentRss/38189.htmlhttp://www.shnenglu.com/iuranus/services/trackbacks/38189.html 

         关于q篇文章我一直想写,但每ơL没有一个闲下来的时_(d)现在试着挤每天的闲暇旉一点点完成?/span>

         一直以来我都想做一个Y件架构师Q所以我在^时的开发中除了(jin)保证写出高质量的代码外,q会(x)从架构者的角度来仔l推敲整个应用。当然了(jin)q个架构主要是指的代码的架构Q那么推敲的依据主要来自三个地方Q?/span>

1Q?/span>GRASP

       每当遇到软g分层Q类g业务逻辑攑֜那个cd个层{问题时Q我通常都会(x)参?/span>GRASPQ?/span>General Responsibility Assignment Software Pattern。包括以下几个原则:(x)

       AQ?/span>Information Expert 信息专家

       BQ?/span>Creator 创徏?/span>

       CQ?/span>Low Coupling 低耦合

       DQ?/span>High Cohesion 高内?/span>

       EQ?/span>Controller 控制?/span>

       FQ?/span>Polymorphism 多?/span>

       GQ?/span>Pure Fabrication U虚?/span>

       HQ?/span>Indirection 间接Q避免对象间直接耦合Q合理分配职?/span>

       GQ?/span>Protected Variations 受保护变化:(x)开闭原则?/span>

       虽说每个思想懂,但真正能用在实际开发中q是有一定难度的Q具体的介绍可以参考大?/span>CRAIG LARMAN的?/span>UML与模式应用》?/span>

2Q?/span>Design Patterns

         古hl剑分三层境界。第一层是每个招式都熟C?/span>, 没事拿出来l练Q比武时按照自己的套路出剑,W二层就是没有招式,只有思想Q假如想解掉别h的剑Q那目标是解剑Q随便出剑都可以做到。第三层是人剑合一Q这U境界就已经不依赖与剑了(jin)Qn边的M物体包括自己都可以是一把剑Q都可以|对方于d?/span>

         世间万物皆相通,我认为模式的学习(fn)也是有三U阶D,23U模式熟C?j),遇到具体目套相对应的设计模式,虽然有点LQ但lY件的l护和扩展带来很大好处,q是学习(fn)设计模式的第一层。第二层是大脑中已l没有具体的模式Q只知道如果要解耦,那么p样做Q如果追求运行速度Q就那样做,q就不一定是23U模式的一U了(jin)。如果已l有前两层的功力Q那pq求计模式合一Q这时就有很多变化,创造模式,不会(x)依赖与语a(C, C++, JAVA{等)Q各个领域的设计模式{等。估?/span>Erich Gamma应该C(jin)W三层境界了(jin)吧?/span>

3. 我的前辈

         他们在这斚w很有l验Q架构这个东西就是^时要U篏丰富目l验Q看看国外的一个个大牛Q都不是40多岁的hQ所以我很讨厌某些a软g是吃青春饭的

         在正常的情况Q在我看来,现在的Y件设计从大的角度来讲是复用Q?/span>ReuseQ,从小的角度来讲就是解?/span>(Decouple或?/span>separate concern)。作Z名优U的程序员Q开发一?/span>AppQ写一句代码都要考虑C写的q个cM其它cȝ关系Q是不是多余的依赖,适不适合扩展{等。由于这D|间工作的需要,我接q{?jin)三个项目,目睹了(jin)每个项目架构的优缺点,加之前不久我又进行?jin)IJC关于RUP的培训,?/span>IJC?/span>David和蒋胜老师深入的讨Z(jin)软g开发过E,所以我x学到的一些设计方法D个例子来说明?/span>

         在进入主题之前我惛_叙述一些概c(din)?/span>

         概念1Q由面向q程到面向对象绝Ҏ(gu)一个质的飞跃,我认?/span>OO最大的优点在于它的E序设计和现实世界是相对应的Q从23U设计模式的名字上面也有体现。工厂,代理Q适配器等{?/span>

         概念2Q?/span>MVCQ?/span>Model-View-ControllerQ模?/span>?/span>视图?/span>控制器模式)(j)用于表示一UY件架构模式。它把Y件系l分Z个基本部分:(x)模型Q英?/span>:ModelQ,视图Q?/span>ViewQ和控制Q?/span>ControllerQ?/span>视图(View)代表用户交互界面Q控?/span>(Controller)可以理解模型与视图匚w在一P共同完成用户的请求。模型主要是指业务流E的具体l节Q整个过E如?/span>1。那么其实在实际的开发中MVCq是有很多局限性的Q后面会(x)通过一个例子给Z个我的改q版?/span>

 

 

?/span>1

         概念3Q?/span>RUP

         RUPQ?/span>Rational Unified ProcessQ统一软g开发过E,l一软gq程)是一个面向对象且Z|络的程序开发方法论。根?/span>Rational(Rational Rose和统一建模语言的开发?/span>)的说法,好像一个在U的指导者,它可以ؓ(f)所有方面和层次的程序开发提供指导方针,模版以及(qing)事例支持?/span> RUP和类似的产品--例如面向对象的Y件过E(OOSPQ,以及(qing)OPEN Process都是理解性的软g工程工具--把开发中面向q程的方面(例如定义的阶D,技术和实践Q和其他开发的lgQ例如文,模型Q手册以?qing)代码等{)(j)整合在一个统一的框架内?/span>

         抓其_N是使整个开发过E统一Q可理。用例驱动,以架构ؓ(f)中心(j)Q增量与q代Q是RUP的主要思想?/span>RUP是一个很复杂的过E,但好在它在每个项目中使用时可以因地制宜,有效的裁减可以RUP在工E中发挥最大的威力。作Z个程序员Q我首先要关?j)的是有关代码架构的问题Q?/span>RUP有一个核?j)的思想Separate concernQ也是分离x炏V这也刚好体C(jin)面向对象的一个思想Q解耦。那?/span>RUP中最能体现它Separate concern的应该就它?/span>Minimal?/span>Extension?jin),当然q有一些其它的体现方式Q我?x)在下篇实例中详l介l?/span>

      单来?/span>Minimal指的是那些上不依赖于表现层,下不依赖于数据库Q操作系l等,可以在Q何环境下q行的纯业务逻辑E序Q最主要的还?/span>Minimal部分的代码可以复用?/span>Extension包括MinimalQ它依赖于某个特定的底层E序或者操作系l?/span>Minimal?/span>ExtensioncM于图2的关pR?br>

?



]]>
设计为先,~码在后http://www.shnenglu.com/iuranus/archive/2007/01/22/17889.html攀?/dc:creator>攀?/author>Mon, 22 Jan 2007 08:32:00 GMThttp://www.shnenglu.com/iuranus/archive/2007/01/22/17889.htmlhttp://www.shnenglu.com/iuranus/comments/17889.htmlhttp://www.shnenglu.com/iuranus/archive/2007/01/22/17889.html#Feedback3http://www.shnenglu.com/iuranus/comments/commentRss/17889.htmlhttp://www.shnenglu.com/iuranus/services/trackbacks/17889.html      W二个项目的设计是终于结束了(jin)Q今天老大看了(jin)下通过Q开始编码。呵呵呵Q另一个巨大的工程要开始了(jin)Q但是这个不恐怖?br>      在学校每ơ开发的时候都说先设计再编E,但到真正开始的时候就׃(jin)Q编码完成后再说Q编码完后,文乱写两下׃工了(jin)Q所以说以前Ҏ(gu)没有设计q什么,D我这ơ做的比较吃力?img height=19 src="http://www.shnenglu.com/Emoticons/cry_smile.gif" width=19 border=0>
      说真的这个roseq不错,以前切的说是不?x)用Q这ơ用它画?jin)类图,时序图,让我寚w向对象认识又深刻?jin)一点,ȝ下这几天学到的东西:(x)

      Q.Q݋Q中cd与时序图的画法,搞清楚关联的几种表达Ҏ(gu)Q对四种视图有了(jin)大体认识?br>      Q.ROSE的基本用,包括dQ分包,g码?br>      Q.大部分用了(jin)l承Q组合这两种基本设计模式Q感觉比较麻?ch)?br>      Q.基本搞清QuQL(fng)E序l构Q可以实现基本的Qテ?br>
      当然通过q几天学?fn),也发现自p有很多不I最q切的事有:(x)
      Q.学日语,l的文是日文的Q虽说基本能看懂Q但是让我认识到来q有很多时候会(x)有这U情况,所以还是好好把日语学吧Q?br>      Q.QDQ,很大的概念,很想学的东西Q但是不?x)吧Q过几天工资发了(jin)买几本书看看?br>      Q.设计模式也要研究呀Q在设计cȝ时候,我一直在惻Iq样做好q是那样做好Q就用基本的l承Q组合套工程呀Q没有什么uQEQ_(d)QԌQIQPQRQ的思想Q这个确实的研究?jin)?br>
      基本p些了(jin)Q休息的差不多了(jin)Q写代码吧?br>      再说一个开?j)的事,昨天晚上Z(jin)不让QE看电(sh)影,q她买?jin)个十字l,她玩的蛮高兴Q呵呵!



]]>
保持架构E_--面向接口的编E?/title><link>http://www.shnenglu.com/iuranus/archive/2006/12/31/17091.html</link><dc:creator>攀?/dc:creator><author>攀?/author><pubDate>Sun, 31 Dec 2006 07:58:00 GMT</pubDate><guid>http://www.shnenglu.com/iuranus/archive/2006/12/31/17091.html</guid><wfw:comment>http://www.shnenglu.com/iuranus/comments/17091.html</wfw:comment><comments>http://www.shnenglu.com/iuranus/archive/2006/12/31/17091.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.shnenglu.com/iuranus/comments/commentRss/17091.html</wfw:commentRss><trackback:ping>http://www.shnenglu.com/iuranus/services/trackbacks/17091.html</trackback:ping><description><![CDATA[       接口把定义与实现分离Q它反映?jin)系l设计h员对pȝ的抽象理解,它可以把模块lg化,利于模块之间的交互,q次目构架个框Ӟ但是Ҏ(gu)来说真的有点难,׃q个面向接口的编E开始吧?br>在设计模式中真的很重视实C接口分离Q原因有下面几个Q?br>1. 对一般的E序员来_(d)他们不需要知道具体的实现Q只需要清楚接口发布出的方法就可以?jin)?br>2.因ؓ(f)接口是需求中比较E_的部分,而实现则是和具体的环境相兌的,只要满接口Q其它Y件开发团队同栯够开发出合用的应用来。在当前q样一个讲求合作、讲求效率的大环境中。这U开发方法是非常重要的? <img src ="http://www.shnenglu.com/iuranus/aggbug/17091.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.shnenglu.com/iuranus/" target="_blank">攀?/a> 2006-12-31 15:58 <a href="http://www.shnenglu.com/iuranus/archive/2006/12/31/17091.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://www.shnenglu.com/" title="精品视频久久久久">精品视频久久久久</a> <div class="friend-links"> </div> </div> </footer> <a href="http://www.hdtnet.cn" target="_blank">ٸþþþþñŪ߳</a>| <a href="http://www.0371trip.cn" target="_blank">99þó˹Ʒ</a>| <a href="http://www.rh-hr.cn" target="_blank">99þþƷһëƬ </a>| <a href="http://www.citysoso.cn" target="_blank">ŷƷһþ˵</a>| <a href="http://www.aikandianying.cn" target="_blank">þ޾Ʒ</a>| <a href="http://www.it0557.cn" target="_blank">99ȶǾƷþþþþ</a>| <a href="http://www.yinbaomall.cn" target="_blank">պݺݾþ͵͵ɫۺ96</a>| <a href="http://www.anacli.cn" target="_blank">ĻѾþ</a>| <a href="http://www.blv5.cn" target="_blank">wwþþþþþþþ</a>| <a href="http://www.jw62.cn" target="_blank">þSEƷһ</a>| <a href="http://www.leathvx.cn" target="_blank">պƷþþþþ</a>| <a href="http://www.popotang.cn" target="_blank">þAVһ</a>| <a href="http://www.gcxv.cn" target="_blank">ŷþۺ</a>| <a href="http://www.modellesson.cn" target="_blank">һɫþ88ۺպƷ </a>| <a href="http://www.uywz.cn" target="_blank">˾þô߽AVɫɫ</a>| <a href="http://www.juzijia.cn" target="_blank">þ޹ŷ޾Ʒһ</a>| <a href="http://www.epcinet.cn" target="_blank">ڵСþþþþþ</a>| <a href="http://www.jxfic.org.cn" target="_blank">Ʒŷ޺ձþ</a>| <a href="http://www.fzdhqp.cn" target="_blank">һһþAþۺϾƷ</a>| <a href="http://www.gdfw.org.cn" target="_blank">þþþùAV鶹</a>| <a href="http://www.pk9777.cn" target="_blank">þۺ˿ձ</a>| <a href="http://www.baoshuidaili.com.cn" target="_blank">þþþþþ</a>| <a href="http://www.baipe.cn" target="_blank">Ʒþ</a>| <a href="http://www.jsmyy.cn" target="_blank">һþöAV</a>| <a href="http://www.dt175.cn" target="_blank">ھƷ99þ</a>| <a href="http://www.bjwx2008.cn" target="_blank">þۺŷ</a>| <a href="http://www.iscrip.cn" target="_blank">Ļþۺ</a>| <a href="http://www.schzjy.cn" target="_blank">þоƷƵ</a>| <a href="http://www.vxfawh.cn" target="_blank">þþþAVۺϲҰ</a>| <a href="http://www.hnxxzw.cn" target="_blank">þ99Ʒһ</a>| <a href="http://www.netbirds.cn" target="_blank">69Ʒþþþվ</a>| <a href="http://www.114best.com.cn" target="_blank">2021þþƷѹۿ</a>| <a href="http://www.pz25555.cn" target="_blank">ɫþùƷ12p</a>| <a href="http://www.sevengreen.cn" target="_blank">Ʒþþþһ </a>| <a href="http://www.foxconm.cn" target="_blank">ۺ˾þۺ</a>| <a href="http://www.zgsmkf.cn" target="_blank">þþþþþƵ</a>| <a href="http://www.caikuaipeixun.com.cn" target="_blank">ɫۺϺϾþۿ</a>| <a href="http://www.2218335.cn" target="_blank">޹Ʒľþþ </a>| <a href="http://www.flycard.com.cn" target="_blank">þùƷ͵99</a>| <a href="http://www.bltt.net.cn" target="_blank">Ʒþùһ㽶</a>| <a href="http://www.sklly.cn" 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>