Core Design Patterns(7) Facade 外观模式

VS 2008

客户端代码需要与多个子系统进行交互,通常完成一个功能需要一系列复杂的请求。此时,可以提供一个外观类简化客户端代码的请求。
外观模式为子系统提供不能的访问接口,并隐藏子系统的内部实现。

1. 模式UML图



2. 应用

    一个网站系统中,SiteInfo类封装了网站的一般信息,VersionInfo类封装了网站的版本信息。
    客户代码需要同时得到网站信息包括版本信息。根据实际情况,SiteInfo类和VersionInfo类可能提供很多各式各样的访问接口。而目前客户代码只需要取得少量信息,于是,为了避免让客户代码与SiteInfo类和VersionInfo类直接打交道。使用外观模式,提供一个SiteFacade。



SiteInfo.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DesignPattern.Facade.BLL {
    
public class SiteInfo {

        
public string GetSiteName() {
            
return "遇见未来";
        }

    }

}


VersionInfo.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DesignPattern.Facade.BLL {
    
public class VersionInfo {

        
public string GetCurrentVersion() {
            
return "1.0.0";
        }

    }

}


SiteFacade.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace DesignPattern.Facade.BLL {
    
public class SiteFacade {
        
private SiteInfo siteInfo;
        
private VersionInfo versionInfo;

        
private SiteInfo GetSiteInfo() {
            
if (siteInfo == null{
                siteInfo 
= new SiteInfo();
            }

            
return siteInfo;
        }

        
private VersionInfo GetVersionInfo() {
            
if (versionInfo == null{
                versionInfo 
= new VersionInfo();
            }

            
return versionInfo;
        }


        
public string GetInfo() {
            
return this.GetSiteInfo().GetSiteName() + "," + this.GetVersionInfo().GetCurrentVersion();
        }

    }

}


Client

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using DesignPattern.Facade.BLL;

namespace DesignPattern.Facade {
    
class Program {
        
static void Main(string[] args) {

            
string info = new SiteFacade().GetInfo();
            Console.WriteLine(info);
        }

    }

}


Output



posted on 2008-03-09 20:51  Tristan(GuoZhijian)  阅读(579)  评论(0编辑  收藏  举报