当前位置:C++技术网 > 资讯 > 菜鸟解析设计模式:4

菜鸟解析设计模式:4

更新时间:2016-08-20 15:02:53浏览次数:1+次

声明:本文参考自郗晓勇的文章《23种设计模式》,外观模式参考自 chenssy 的文章

10.外观

很容易看懂。这个模式,意思就是外部的功能需求只需要从外观提取,而不需要直接和各个子系统打交道。这个模式有一个非常明显的好处,那就是我们无需每次一有什么需求就需要自行从子系统中获取,从而方便了子系统的扩展。也有一个非常明显的弊病,那就是需求如果需要扩展,极容易由于考虑不周出现各种问题,导致外观一再重制,从而导致功能需求不断错乱。当然,改的话一般来说也只是改外观就可以。所以我个人的建议是,如果你已经预见了这个软件必然会被一再增加或修改需求,那么我会反对使用这种模式,或是仅仅在局部范围内使用这种模式。当然这不是绝对,需要斟酌使用。




11.共享元

初看这是一个池的设计(就好比 c++ stl 里的 map、set,C#里的 Dictionary)。按原文的意思,如果你需要使用大量的对象,而这些对象的区别仅仅是外部状态的不同,那么可以用少量的共享对象代替这大量的外部对象,而外部对象本身只记录状态。老实说我没有遇到过这种情况。

我猜大概是这个意思:游戏中有一种怪物身上着着火,这种怪物目前有一万只。我们有两种做法可以实现:1.弄一万个火对象,套在一万个怪物身上。2.弄一个火对象,同样套在一万个怪物身上,怪物对象那里仅仅记录火燃烧的时间轴,而不存储火本身。我不知道他是不是这个意思。如果你们有好的看法请务必发表。这个设计模式我也没怎么看懂。





12.代理

看图很好懂。代理继承了被代理的,调用真正干活的。这是典型的父类指针指向子类对象的应用。

下面我就直接照抄原文了。因为我认为这是可以直接看懂的。

意图:

为其他对象提供一种代理以控制对这个对象的访问。

适用性:

在需要用比较通用和复杂的对象指针代替简单的指针的时候,使用Proxy模式。下面是一 些可以使用Proxy 模式常见情况: 
1) 
远程代理(Remote Proxy )为一个对象在不同的地址空间提供局部代表。 NEXTSTEP[Add94] 使用NXProxy 类实现了这一目的。Coplien[Cop92] 称这种代理为大使” Ambassador )。 
2 )
虚代理(Virtual Proxy )根据需要创建开销很大的对象。在动机一节描述的ImageProxy 就是这样一种代理的例子。 
3) 
保护代理(Protection Proxy )控制对原始对象的访问。保护代理用于对象应该有不同 的访问权限的时候。例如,在Choices 操作系统[ CIRM93]KemelProxies为操作系统对象提供 了访问保护。 
4 )
智能指引(Smart Reference )取代了简单的指针,它在访问对象时执行一些附加操作。 它的典型用途包括:

对指向实际对象的引用计数,这样当该对象没有引用时,可以自动释放它(也称为SmartPointers[Ede92 ] )

当第一次引用一个持久对象时,将它装入内存。

在访问一个实际对象前,检查是否已经锁定了它,以确保其他对象不能改变它。