乱砍设计模式之十一 -- 其他

     FACADE(外观)模式:是为子系统中的一组接口提供一个一致的界面。该模式理解起来还是比较容易的,举个例子:

class  Eye
{
public :    
    Draw(){}
};

class  Mouse
{
public :    
    Draw(){}
};

class  Nose
{
public :    Draw(){}
};
我们有眼睛,嘴,鼻子这样的类。一般来说脸的组成是一定的,那我们就可以提供一个Face类,如下:
class  Face
{
public :    
    Draw()    
    {    
        Eye LiftEye;    
        Eye RightEye;    
        Mouse mouse;    
        Nose nose;        
        liftEye.Draw();        
        RightEye.Draw();    
        mouse.Draw();       
        nose.Draw();    
    }
};
一般情况下,Eye,Mouse和Nose的使用都是这样的一个过程。而Fa?ade的目的就是为一般情况提供一个简化的接口,使用者直接调用Face就可以了,不需要自己去调用Eye等类了。
     FLYWEIGHT(享元)模式:应用共享技术有效地支持细粒度的对象。这个模式,我自己想不到太好的例子,简单的把《设计模式》上的例子在这儿再序述一下。假如我们做一个文本编辑器,准备把每个字符做为一个对象,那么我们可能有这样一个类:
class  Character
{
private :
    CFond _fond;    
    Color _color;
    
char  _charcode;

public :
    Draw(){}
};
     可以看到每个字符都包括字体,颜色等信息。这样的话,每个字符都会占用比较大的空间,而我们知道来般来说一篇文章中有很多重复的字符(尤其是英文,总共就那么26个字母),为每个字符都提供一个对象,是种浪费。这时候就可以利用FLYWEIGHT模式,可以提供一个链表,把出现了的字符组合放到链表中。这样使用字符的时候,只要有它在链表中的位置就可以了(可能是个整数,也可能是一个指针,总之比Character会小很多)。具体如何去用,大家可以参考《设计模式》一书。
     PROXY(代理)模式:该模式其实很简单,目的就是帮助远程对象或者占用空间比较大的对象提供一个代理接口,这样只有在真正需要被代理类的时候,才把它载入内存。还是《设计模式》上的例子,简单看一下:
class  ImageProxy
{
private :
    Image 
* _image;

public :    
    
void  Draw()
    {        
        
if  ( _image  ==  NULL)
        {            
            _image 
=  LoadImage(fileName);    
        }        
        
        _image.Draw();    
    }
};
  不多写了,代理类会拥有一个它代理的类的对象,如Draw()中,只有在真正需要_image的时候才把它载入内存。
     Chain Of Responsibility(责任链)模式:该模式的目的是使多个对象有机会处理请求,如果一个对象不对请求作出响应,则沿着链表传递请求,直到找到可以处理该请求的对象为止。MFC中的消息处理机制就是如此实现的,有兴趣的可以找来看看。
    
     Interpreter(解释器)模式,其实就是Composite模式,《设计模式》书上有一段描述说Interpreter不是Composite模式,但我没搞明白究竟在说什么(不知道是不是翻译的变了味)。反正它和Composite模式形式上没有太多区别。
    
     Mediator(中介者)模式,感觉不容易简单讲明白,还是自己看书吧。事实上也不难理解。
    
     Memento(备忘录)模式,这个模式没什么好讲的,就是在操作过程中,一个对象的状态可能改变,为了支持返回操作,可能需要把该对象的状态记录下来,这样的话就需要提供一个Memento类了。
    
     Template Method(摸版方法),该模式主要用在框架中,如MFC中。方法的就是在基类中定义一个操作算法的骨架,而将一些函数延迟到子类中才实现。例子还是看书吧,其实实现方法和工厂方法类似。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值