??xml version="1.0" encoding="utf-8" standalone="yes"?>国产成人无码精品久久久免费 ,99久久国产免费福利,国产福利电影一区二区三区久久老子无码午夜伦不http://m.shnenglu.com/richardhe/category/7785.html学无止境!永远学下?zh-cnMon, 08 Dec 2008 14:32:46 GMTMon, 08 Dec 2008 14:32:46 GMT60成员函数指针与高性能的C++委托http://m.shnenglu.com/richardhe/articles/68829.htmlRichardHeRichardHeMon, 08 Dec 2008 03:50:00 GMThttp://m.shnenglu.com/richardhe/articles/68829.htmlhttp://m.shnenglu.com/richardhe/comments/68829.htmlhttp://m.shnenglu.com/richardhe/articles/68829.html#Feedback0http://m.shnenglu.com/richardhe/comments/commentRss/68829.htmlhttp://m.shnenglu.com/richardhe/services/trackbacks/68829.html阅读全文

RichardHe 2008-12-08 11:50 发表评论
]]>
设计模式Q一Q?/title><link>http://m.shnenglu.com/richardhe/articles/58160.html</link><dc:creator>RichardHe</dc:creator><author>RichardHe</author><pubDate>Wed, 06 Aug 2008 08:36:00 GMT</pubDate><guid>http://m.shnenglu.com/richardhe/articles/58160.html</guid><wfw:comment>http://m.shnenglu.com/richardhe/comments/58160.html</wfw:comment><comments>http://m.shnenglu.com/richardhe/articles/58160.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://m.shnenglu.com/richardhe/comments/commentRss/58160.html</wfw:commentRss><trackback:ping>http://m.shnenglu.com/richardhe/services/trackbacks/58160.html</trackback:ping><description><![CDATA[http://m.shnenglu.com/Fox/archive/2008/08/06/58154.html<br> <div id="tpzjpll" class="postbody"> <p><strong><font color="#800000">0. Introduction</font></strong></p> <p>接触设计模式有两q时间了Q但一直没有系l整理过Qؓ了不至于让自q思维被繁琐的工作一点点锢Q还是决定ȝ一下,Z能够真正做到有所收获Q整个系列会按照<a title="Gang of four" target="_blank">GoF的Design Patterns: Elements of Reusable Object-Oriented Software</a>的行文思\Q但不会照本宣科是了,<a title="Wikipedia" target="_blank">Wikipedia</a>上关?3U设计模式的介绍非常全面QCSDN上也可以下蝲?英文电子,因此很多套话、类图一概省厅R?/p> <p>最早接触设计模式的时候,隑օ被各U模式的联系和区别所困扰Q从教科书的分析可以得到模式之间形式上的不同。但q样对于领会设计模式意义不大Q因为我们掌握模式的目的是ؓ了融会诏通,灉|q用Q以对开发有所帮助?/p> <p>E微成规模的OOE序Q会有大量对象,其中很多实体对象之间存在着<strong>父子、兄?/strong>关系Q对象的<strong>创徏</strong>提升ZU模式。其好处在于设计模式本n所宣称?strong>reusable</strong>Q这像堆积木盖房子一P堆的好的情况下,换一换门H便是另一番风景?/p> <p>关于实现Q我不会Z厘清模式间的区别而刻意用相g码实玎ͼ相反Q我会根据模式本w的适用情况举例Q而且大量代码Z<a title="http://sourcemaking.com/design_patterns" target="_blank">SourceMaking</a>?/p> <p>_______________________________</p> <p><strong><font color="#800000">1. Creational Design Patterns(DP)</font></strong></p> <p>创徏型DP抽象了类和对象的创徏q程Q?a title="Gang of four" target="_blank">GoF</a>l出?U?strong>创徏型DP</strong>Q?strong>Abstract Factory</strong>?strong>Builder</strong>?strong>Factory Method</strong>?strong>Builder</strong>?strong>Prototype</strong>?strong>Singleton</strong>?/p> <p><strong><font color="#800000">2. Abstract Factory</font></strong></p> <p><strong>意图Q提供一个创Zpd相关或相互依赖对象的接口Q而无需指定它们具体的类?/strong></p> <p>1) 只提供了一个创建接口,其返回gؓ具体产品Q如<code>AbstractProduct *Client::CreateProduct(AbstractFactory &factory);</code></p> <p>2) 接口的参数是一?strong>工厂对象</strong>Q?code>AbstractFactory &factory</code>Q的引用Q参数类型(<code>AbstractFactory</code>Qؓ抽象基类Q调用时Ҏ需要传入具体工厂对象即可;</p> <p>3) 接口内部实现?strong>一pd相关或相互依赖对?/strong>Q抽象品)的创建:当传入具体工厂时Q接口实现的是<strong>一pd具体产品</strong>的创建;</p> <p>4) 创徏的?strong>立即q回</strong>Q?code>CreateProduct</code>Q?/p> <p><strong>参与者:</strong></p> <p>• AbstractFactory<br>?声明一个创建抽象品对象的操作接口?/p> <p>• ConcreteFactory<br>?实现创徏具体产品对象的操作?/p> <p>• AbstractProduct<br>?ZcM品对象声明一个接口?/p> <p>• ConcreteProduct<br>?定义一个将被相应的具体工厂创徏的品对象?br>?实现AbstractProduct接口?/p> <p>• Client<br>?仅用由AbstractFactory和AbstractProductcd明的接口?/p> <p><strong>代码Q?/strong></p> <code> </code> <p>class AbstractFactory<br>{<br>public:<br>    virtual AbstractProduct *MakePartA() = 0;<br>    virtual AbstractProduct *MakePartB() = 0;<br>    virtual AbstractProduct *MakePartC() = 0;<br>    virtual AbstractProduct *AddPart(const AbstractProduct *pPart) = 0;<br>}; </p> <p>AbstractProduct *Client::CreateProduct(AbstractFactory &factory)<br>{<br>    AbstractProduct *pProduct = factory.CreateProduct();<br>    AbstractProduct *pPartA = factory.MakePartA();<br>    AbstractProduct *pPartB = factory.MakePartB();<br>    AbstractProduct *pPartC = factory.MakePartC();<br>    factory.AddPart(pPartA);<br>    factory.AddPart(pPartB);<br>    factory.AddPart(pPartC);<br>    return pProduct;<br>} </p> <p>int main(void)<br>{<br>    Client client;            <br>    ConcreteFactory factory;<br>    client.CreateProduct(factory);<br>    return 0;<br>} </p> <p><strong><font color="#800000">3. Builder</font></strong></p> <p><strong>意图Q将一个复杂对象的构徏与它的表C分,使得同样的构E可以创Z同的表示?/strong></p> <p>1) director提供抽象产品创徏接口Q如<code>void Director::Construct();</code></p> <p>2) 不同产品使用<strong>同一创徏q程</strong>Q由director指定特定builder以生产不同品;</p> <p>3) 接口内部实现?strong>一个复杂对?/strong>Q抽象品)的创建:当传入具体工厂时Q接口实现的?strong>一个复杂的具体产品</strong>的创建;</p> <p>4) 创徏的?strong>q不立即q回</strong>Q?strong>创徏完毕</strong>后返回,?strong>使用接口</strong>Q?code>GetProduct</code>Q提取结果?/p> <p><strong>参与者:</strong></p> <p>• Builder<br>?为创Z个Product对象的各个部件指定抽象接口?/p> <p>• ConcreteBuilder<br>?实现Builder的接口以构造和装配该品的各个部g?br>?定义q明它所创徏的表C?br>?提供一个检索品的接口?/p> <p>• Director<br>?构造一个用Builder接口的对象?/p> <p>• Product<br>?表示被构造的复杂对象。ConcreteBuilder创徏该品的内部表示q定义它的装配过E?br>?包含定义l成部g的类Q包括将q些部g装配成最l品的接口?/p> <p><strong>代码Q?/strong></p> <code> </code> <p>class Builder<br>{<br>public:<br>    virtual void MakePartA() = 0;<br>    virtual void MakePartB() = 0;<br>    virtual void MakePartC() = 0; </p> <p>    Product *GetProduct()    { return _product; } </p> <p>protected:<br>    Product *_product;<br>}; </p> <p>class Director<br>{<br>public:<br>    void setBuilder(Builder *b)    { _builder = b; }<br>    void Construct(); </p> <p>private:<br>    Builder *_builder;<br>}; </p> <p>void Director::Construct()<br>{<br>    _builder.MakePartA();<br>    _builder.MakePartB();<br>    _builder.MakePartC();<br>} </p> <p>int main(void) {<br>    ConcreteBuilderA concreteBuilderA;<br>    ConcreteBuilderB concreteBuilderB;<br>    Director director;<br>    Product *pProduct; </p> <p>    director.SetBuilder(&concreteBuilderA);<br>    director.Construct();<br>    pProduct = concreteBuilderA.GetProduct();<br>    pProduct->Show(); </p> <p>    director.SetBuilder(&concreteBuilderB);<br>    director.Construct();<br>    pProduct = concreteBuilderB.GetProduct();<br>    pProduct->Show(); </p> <p>    return 0;<br>}</p> <p><strong><font color="#800000">4. Factory Method</font></strong></p> <p><strong>意图Q定义一个用于创建对象的接口Q让子类军_实例化哪一个类。Factory Method使一个类的实例化延迟到其子类?/strong></p> <p>1) 看得模式其实是<strong>C++的多态特?/strong>Q?strong>l承</strong>实现。因此,其别名ؓ<strong>虚构造器Q?Virtual ConstructorQ?/strong>Q?/p> <p>2) 作ؓ模式与C++多态特性不同的是,Creator可以定义<strong>工厂Ҏ的缺省实?/strong>Q完成缺省操作,MFC大量使用了这一思想?/p> <p><strong>参与者:</strong></p> <p>• Product<br>?定义工厂Ҏ所创徏的对象的接口?/p> <p>• ConcreteProduct<br>?实现Product接口?/p> <p>• Creator<br>?声明工厂ҎQ该Ҏq回一个Productcd的对象。Creator也可以定义一个工厂方法的~省实现Q它q回一个缺省的ConcreteProduct对象?br>?可以调用工厂Ҏ以创Z个Product对象?/p> <p>• ConcreteCreator<br>?重定义工厂方法以q回一个ConcreteProduct实例?/p> <p><strong>代码Q?/strong></p> <p><code>ConcreteProduct *ConcreteCreator::FactoryMethod()<br>{<br>    <code>ConcreteProduct</code> *pProduct = new <code>ConcreteProduct</code>;<br>    return pProduct;<br>}</code></p> <p><code>Product *Creator::FactoryMethod()<br>{<br>    Product *pProduct = new Product;<br>    return pProduct;<br>} </code></p> <p>int main(void) {<br>    Creator creator;<br>    ConcreteProduct *pProduct; </p> <p>    pProduct = creator.FactoryMethod();<br>    pProduct->Show(); </p> <p>    return 0;<br>} </p> <p><strong><font color="#800000">5. Prototype</font></strong></p> <p><strong>意图Q用原型实例指定创徏对象的种c,q且通过拯q些原型创徏新的对象?/strong></p> <p>1) 创徏不再通过工厂新类<strong>l承QinheritanceQ?/strong>Q而是通过<strong>委托QdelegationQ?/strong>Q?/p> <p>2) 栚w?strong>拯原型实例</strong>创徏新对象?/p> <p><strong>参与者:</strong></p> <p>• ProtoType<br>?声明一个克隆自w的接口?/p> <p>• ConcreteProtoType<br>?实现一个克隆自w的操作?/p> <p>• Client<br>?让一个原型克隆自w从而创Z个新的对象?/p> <p><strong>代码Q?/strong></p> <code> </code> <p>class ProtoType<br>{<br>public:<br>    virtual void Draw();<br>    virtual ProtoType *Clone() = 0;<br>    virtual void Initialize();<br>}; </p> <p>class ProtoTypeA: public ProtoType<br>{<br>public:<br>    virtual ProtoType *Clone()<br>    {<br>        return new ProtoTypeA;<br>    }<br>}; </p> <p>class ProtoTypeB: public ProtoType<br>{ <br>public:<br>    virtual ProtoType *Clone()<br>    {<br>        return new ProtoTypeB;<br>    }<br>}; </p> <p>class Client<br>{<br>public:<br>    static ProtoType *Clone( int choice ); </p> <p>private:<br>    static ProtoType *s_prototypes[3];<br>}; </p> <p>ProtoType* Client::s_prototypes[] = { 0, new ProtoTypeA, new ProtoTypeB }; </p> <p>ProtoType *Client::Clone(int choice)<br>{<br>    return s_prototypes[choice]->Clone();<br>} </p> <p><strong><font color="#800000">6. Singleton</font></strong></p> <p><strong>意图Q保证一个类仅有一个实例,q提供一个访问它的全局讉K炏V?/strong></p> <p>1) ?strong>静态成员函?/strong>保证上述意图?/p> <p><strong>参与者:</strong></p> <p>• Singleton<br>?定义一个Instance操作Q允许客戯问它的唯一实例。Instance是一个类操作Q即C++中的一个静态成员函敎ͼ?br>?可能负责创徏它自q唯一实例?/p> <p><strong>代码Q?/strong></p> <code> </code> <p>class Singleton<br>{<br>public:<br>    static Singleton *GetInstance()<br>    {<br>        if (!s_instance)<br>            s_instance = new Singleton;<br>        return s_instance;<br>    } </p> <p>    void Run()    {} </p> <p>private:<br>    static Singleton *s_instance;<br>    Singleton()    {}                // Singleton cannot be created outside.<br>}; </p> <p>Singleton *GetSingleton(void)<br>{<br>    return Singleton::GetInstance();<br>} </p> <p>int main(void)<br>{<br>    GetSingleton()->Run(); </p> <p>    return 0;<br>}</p> <p>______________________________________________</p> <p>代码写的都比较简单,基本可以各U模式之间的不同体现出来了?/p> </div> <br><img src ="http://m.shnenglu.com/richardhe/aggbug/58160.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://m.shnenglu.com/richardhe/" target="_blank">RichardHe</a> 2008-08-06 16:36 <a href="http://m.shnenglu.com/richardhe/articles/58160.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss> <footer> <div class="friendship-link"> <p>лǵվܻԴȤ</p> <a href="http://m.shnenglu.com/" title="精品视频久久久久">精品视频久久久久</a> <div class="friend-links"> </div> </div> </footer> <a href="http://www.uywz.cn" target="_blank">þþþþþþþþþþþ</a>| <a href="http://www.gwvv.cn" target="_blank">91þþžվ</a>| <a href="http://www.hvnm.cn" target="_blank">þ޹վ</a>| <a href="http://www.lstweb.cn" target="_blank">þһ </a>| <a href="http://www.52cxw.cn" target="_blank">ƷŮþþþAV </a>| <a href="http://www.168zw.cn" target="_blank">þþþӰԺŮ </a>| <a href="http://www.daliandamingda.cn" target="_blank">˾þþþƷ </a>| <a href="http://www.ppmov.cn" target="_blank">Ưޱ˾þþƷ</a>| <a href="http://www.023job.com.cn" target="_blank">þ</a>| <a href="http://www.gdlj2004.cn" target="_blank">þWWW˳һƬ</a>| <a href="http://www.bqtao.cn" target="_blank">99þˬ޾ƷŮ</a>| <a href="http://www.yxcyfa.cn" target="_blank">þպƬ</a>| <a href="http://www.pr010.cn" target="_blank">þþ޹</a>| <a href="http://www.82nn.cn" target="_blank">޾Ʒ99þþþĻ </a>| <a href="http://www.ddmir.cn" target="_blank">˾þ뾫ƷĻ</a>| <a href="http://www.sh-tx.cn" target="_blank">þþþҹҹҹƷ</a>| <a href="http://www.hiinterface.cn" target="_blank">ɫþˬˬƬAV</a>| <a href="http://www.558866.com.cn" target="_blank">Ʒһþþþþþվ</a>| <a href="http://www.2blood.cn" target="_blank">һAvëƬþþƷ</a>| <a href="http://www.30ww.cn" target="_blank">ݺɫۺϾþ</a>| <a href="http://www.wzyuan25.cn" target="_blank">ۺɫ77777þ</a>| <a href="http://www.uuu9com.cn" target="_blank">þþþƷһ</a>| <a href="http://www.hlbelss.org.cn" target="_blank">þùĻ</a>| <a href="http://www.chindr-nb.cn" target="_blank">þþƷ}Ů</a>| <a href="http://www.vocard.cn" target="_blank">þþƷav鶹ѿ</a>| <a href="http://www.dgwbcc.cn" target="_blank">þþþþ޾Ʒ</a>| <a href="http://www.pudlv.cn" target="_blank">ƷþĻ</a>| <a href="http://www.kwk9605.cn" target="_blank">26uuuþ</a>| <a href="http://www.zhe9tao.cn" target="_blank"> ŷ þ</a>| <a href="http://www.sdyuyangjixie.cn" target="_blank">ƷŮþþþþ2018</a>| <a href="http://www.wanrengou.cn" target="_blank">þù׽ </a>| <a href="http://www.gzquanjing.cn" target="_blank">þۺϾþۺϾþۺ</a>| <a href="http://www.clkj168.cn" target="_blank">69ۺϾþþƷ</a>| <a href="http://www.k8uvo.cn" target="_blank">þüۺɫۺϰҲȥ</a>| <a href="http://www.zhuaibo.cn" target="_blank">þ99ù龫Ʒ66</a>| <a href="http://www.ftfygs.cn" target="_blank">þþƷAVӰԺ</a>| <a href="http://www.indmc.cn" target="_blank">޾Ʒþþþȥq</a>| <a href="http://www.10zhizui.cn" target="_blank">޹Ʒþþ</a>| <a href="http://www.yywhqy.cn" target="_blank">þþþ޾Ʒһ</a>| <a href="http://www.wow-diamond.com.cn" target="_blank">97Ʒþ찴Ħ</a>| <a href="http://www.hedaji.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>