Core Design Patterns(7) Facade 外观模式
VS 2008
客户端代码需要与多个子系统进行交互,通常完成一个功能需要一系列复杂的请求。此时,可以提供一个外观类简化客户端代码的请求。
外观模式为子系统提供不能的访问接口,并隐藏子系统的内部实现。
1. 模式UML图
2. 应用
一个网站系统中,SiteInfo类封装了网站的一般信息,VersionInfo类封装了网站的版本信息。
客户代码需要同时得到网站信息包括版本信息。根据实际情况,SiteInfo类和VersionInfo类可能提供很多各式各样的访问接口。而目前客户代码只需要取得少量信息,于是,为了避免让客户代码与SiteInfo类和VersionInfo类直接打交道。使用外观模式,提供一个SiteFacade。
SiteInfo.cs
VersionInfo.cs
SiteFacade.cs
Client
Output
客户端代码需要与多个子系统进行交互,通常完成一个功能需要一系列复杂的请求。此时,可以提供一个外观类简化客户端代码的请求。
外观模式为子系统提供不能的访问接口,并隐藏子系统的内部实现。
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 "遇见未来";
}
}
}
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";
}
}
}
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();
}
}
}
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);
}
}
}
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