C++编程思想第二版第二卷笔记5——设计模式

本文探讨了设计模式的核心原则,即分离变化与不变的部分,并通过多种典型模式如单例模式、命令模式及观察者模式等来封装变化。文章还介绍了创建型、结构型和行为型模式的分类,并详细阐述了代理模式的四种应用场景。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="">设计的原则是将易变的元素与稳定的元素分开。</span><span lang="EN-US"><span style="font-family: Calibri;">separate things that change from things that stay the same.</span></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span style="">设计模式的目标是把变化封装起来。</span><span lang="EN-US"><span style="font-family: Calibri;">The goal of design patterns is to encapsulate change.</span></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style=""><span style="font-size: small;">要着手构思一个设计模式之前,扪心自问:“这里真的需要使用继承吗?使用继承的话有什么好处?”</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">GoF</span></span><span style="">的</span><span lang="EN-US"><span style="font-family: Calibri;">23</span></span><span style="">个设计模式分为三类:创建型(</span><span lang="EN-US"><span style="font-family: Calibri;">creational</span></span><span style="">)、结构型(</span><span lang="EN-US"><span style="font-family: Calibri;">structural</span></span><span style="">)、行为型(</span><span lang="EN-US"><span style="font-family: Calibri;">behavioral</span></span><span style="">)。</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">Fonctor</span></span><span style="">:将</span><span lang="EN-US"><span style="font-family: Calibri;">fonction</span></span><span style="">包装到类中。</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">Singleton</span></span><span style="">:只能有一个对象的类。</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">Command</span></span><span style="">:将函数行为与调用地点分离。</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style=""><span style="font-size: small;">使用代理的四种场合:</span></span></p>
<p class="MsoListParagraph" style=""><span style="" lang="EN-US"><span style=""><span style="font-size: small; font-family: Calibri;">1.</span><span style='font: 7pt "Times New Roman";'> </span></span></span><span style=""><span style="font-size: small;">远程代理。</span></span></p>
<p class="MsoListParagraph" style=""><span style="" lang="EN-US"><span style=""><span style="font-size: small; font-family: Calibri;">2.</span><span style='font: 7pt "Times New Roman";'> </span></span></span><span style=""><span style="font-size: small;">虚拟代理。提供“懒惰初始化”,主要用于开销庞大的对象,可以只在需要这样的对象时才构建对象。</span></span></p>
<p class="MsoListParagraph" style=""><span style="" lang="EN-US"><span style=""><span style="font-size: small; font-family: Calibri;">3.</span><span style='font: 7pt "Times New Roman";'> </span></span></span><span style=""><span style="font-size: small;">保护性代理。用于保护代理对象,避免用户取得完全访问权。</span></span></p>
<p class="MsoListParagraph" style=""><span style="" lang="EN-US"><span style=""><span style="font-size: small; font-family: Calibri;">4.</span><span style='font: 7pt "Times New Roman";'> </span></span></span><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">Smart reference</span></span><span style="">。在访问代理对象时附加一些行为。引用计数是一个例子:记录一个特定对象被引用的次数,用于应用写时复制(</span><span lang="EN-US"><span style="font-family: Calibri;">copy-on-write</span></span><span style="">)并防止对象混淆。</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">Factory</span></span><span style="">和</span><span lang="EN-US"><span style="font-family: Calibri;">Builder</span></span><span style="">的主要区别是:</span><span lang="EN-US"><span style="font-family: Calibri;">Builder</span></span><span style="">生成的是一个整体的各个部件,而</span><span lang="EN-US"><span style="font-family: Calibri;">Factory</span></span><span style="">生成的是不同的整体。</span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">Observer</span></span><span style="">:解决某对象改变状态时,一批对象需要更新的问题。</span><span lang="EN-US"></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span style="font-size: small;"><span lang="EN-US"><span style="font-family: Calibri;">Multiple dispatching</span></span><span style="">多重分派:解决多重对象相互交互情况下的分派问题,如不同数据类型的加、减、乘、除等运算。</span><span lang="EN-US"></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><span style="font-size: small; font-family: Calibri;"></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><span style="font-size: small; font-family: Calibri;"></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><span style="font-size: small; font-family: Calibri;"></span></span></p>
<p class="MsoNormal" style="margin: 0cm 0cm 0pt;"><span lang="EN-US"><span style="font-size: small; font-family: Calibri;"></span></span></p>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值