随笔 - 26  文章 - 6  trackbacks - 0
<2009年5月>
262728293012
3456789
10111213141516
17181920212223
24252627282930
31123456

常用链接

留言簿(3)

随笔分类

随笔档案

朋友

  • cqh
  • 大学室友...

搜索

  •  

最新评论

阅读排行榜

评论排行榜

  设计模式精解读书笔记,学习书籍的同时,按着自己的理解编写代码和类图。有误之处请网友指出,thanks。

一、        Facade(外观)模式

为了子系统中的一组接口提供一个一致的界面,Façade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。

Façade模式:关键特征

意图

希望简化现有系统的使用方法。你需要定义自己的接口

问题

只需要使用一个复杂系统的一个子集。或者,需要用一种特殊的方式与系统交互。

解决方案

Façade向客户展现使用现有系统的一个新的接口

参与者和协作者

向客户展现一个定制的接口,让客户更容易地使用现有系统

效果

Façade模式简化了对所需子系统的使用。但是,由于Façade并不完整,因此某些功能对于客户是不可用的

实现

Ø 定义一个(或一组)新的类来提供所需的接口

Ø 让新的类使用现有的系统

 

1.1

 

Façade模式:实例1

意图

希望简化现有系统的使用方法。你需要定义自己的接口

问题

如图1.1original_system有多个函数,client只需要用到其中的funA

解决方案

Façadeclient展现使用original_system的一个新的接口fun

参与者和协作者

向客户展现一个定制的接口,让客户更容易地使用现有系统

效果

Façade模式简化了对所需子系统的使用。但是,由于Façade并不完整,因此funBfunC对于client是不可用的

实现

Ø 定义一个新的类Facade来提供所需的接口

Ø 让新的类Facade使用现有的系统original_system

如图1.2

 

 
1.2

 

#include <iostream>

using namespace std;

class original_system
{
public:
    
void funA(){
        cout 
<< "process funA!" << endl;
    }

    
void funB(){
        cout 
<< "process funB!" << endl;
    }

    
void funC(){
        cout 
<< "process funC!" << endl;
    }

}
;



class Facade
{
public:
    
void fun()
    
{
        orig_sys
->funA();
    }

    Facade()
    
{
        orig_sys 
= new original_system;
    }

private:
    original_system
* orig_sys;
}
;




int main()
{
    Facade
* pfacade = new Facade;
    pfacade
->fun();
    
return 0;
}

 

Façade模式:实例2

意图

希望简化现有系统的使用方法。你需要定义自己的接口

问题

如图1.3,有多个类,客户(main函数)只需要使用顺序使用他们

解决方案

Façade向客户展现使用多个类的一个新的接口fun

参与者和协作者

向客户展现一个定制的接口,让客户更容易地使用现有系统

效果

Façade模式简化了对所需子系统的使用。

实现

Ø  定义一个新的类Facade来提供所需的接口

Ø  让新的类Facade使用现有的多个类

如图1.4


1.3

1.4

 

#include <iostream>

using namespace std;

class classA
{
public:
    
void fun(){
        cout 
<< "process classaA's fun!" << endl;
    }

}
;

class classB
{
public:
    
void fun(){
        cout 
<< "process classaB's fun!" << endl;
    }

}
;

class classC
{
public:
    
void fun(){
        cout 
<< "process classaC's fun!" << endl;
    }

}
;





class Facade
{
public:
    
void fun()
    
{
        claA
->fun();
        claB
->fun();
        claC
->fun();
    }

    Facade()
    
{
        claA 
= new classA;
        claB 
= new classB;
        claC 
= new classC;
    }

    
~Facade()
    
{
        
if (claA)
        
{
            delete claA;
        }

        
if (claB)
        
{
            delete claB;
        }

        
if (claC)
        
{
            delete claC;
        }

    }

private:
    classA
* claA;
    classB
* claB;
    classC
* claC;
}
;




int main()
{
    Facade
* pfacade = new Facade;
    pfacade
->fun();
    
return 0;
}


 

posted on 2010-04-08 21:17 longshen 阅读(958) 评论(0)  编辑 收藏 引用 所属分类: 程序员

只有注册用户登录后才能发表评论。
网站导航: 博客园   IT新闻   BlogJava   博问   Chat2DB   管理