外观模式,正如其名,在开发中,经常会遇到涉及到很多对象的关联操作,例如,处理一个根据用户名获取该用户信息的需求:
1:输入用户名,获取用户名以及权限FullName(可能需要按照权限以获取不同的数据)
2:根据FullName返回完整的原始数据,可能是流数据
3:再次处理原始数据,表现给用户
这个逻辑非常清晰,按照面向对象设计原则开发三个类:
返回用户信息的类UserDeal
public class UserDeal{
private string Uname;
public UserDeal(string _sUame){
this.Uname=_sUame;
}
public string GetUserFullName(){
Console.WriteLine("获取用户名");
return this.Uname+"[权限System]";
}
public int GetUserID(){
return 1;
}
}
根据用户完整信息获取原始数据
public class DealXmlData{
public string GetTopOneData(string uname){
Console.WriteLine("从底层获取数据");
return String.Format("你好,{0},给你的数据是:[外观模式 设计模式]",uname);
}
}
格式化数据
public class UserTemplate{
public string GetFormatData(string sDealData){
Console.WriteLine("格式化数据");
return "最终的数据:"+sDealData;
}
}
然后写个Demo,执行:
public class ConsoleTest{
public static void Main(string[] args){
UserDeal oUserDeal=new UserDeal(sUname);
string newUname=oUserDeal.GetUserFullName();
DealXmlData oDealXmlData=new DealXmlData();
string rawData=oDealXmlData.GetTopOneData(newUname);
UserTemplate oUserTemplate=new UserTemplate();
string rStr=oUserTemplate.GetFormatData(rawData);
return rStr;
}
}
这样就完成了整个需求。
在实际问题中,有如此简单的事情么?一个UserDeal类可能有几千行,所用到的方法很多,更常见的问题是,其中的一些类是人家已经写好了,
你调用就行了,如果所涉及到的类很多的话,其中的操作裸体操作的话,会经常忘记一些事情,例如关闭数据库链接等什么问题。还有,需求
变更的话你需要更换你所有的调用方式,重新理你半年前的思路可不是一个简单的事情,这就是为什么程序员不喜欢改东西的原因...asp里面的include就是解决途径之一...
而外观模式正是这个意思,核心的思想就是按照接口设计,按照需求,作出接口,然后访问接口就行了:
public interface IFacade{
string GetDealsHtml(string sUname);
}
public class FacadeShow:IFacade{
public string GetDealsHtml(string sUname){
UserDeal oUserDeal=new UserDeal(sUname);
string newUname=oUserDeal.GetUserFullName();
DealXmlData oDealXmlData=new DealXmlData();
string rawData=oDealXmlData.GetTopOneData(newUname);
UserTemplate oUserTemplate=new UserTemplate();
string rStr=oUserTemplate.GetFormatData(rawData);
return rStr;
}
}
public class ConsoleTest{
public static void Main(string[] args){
Console.WriteLine("开始执行外观模式");
FacadeShow oFacadeShow=new FacadeShow();
Console.WriteLine(oFacadeShow.GetDealsHtml("5do8"));
Console.ReadLine();
}
}
输出结果:
开始执行外观模式
获取用户名
从底层获取数据
格式化数据
最终的数据:你好,5do8[权限System],给你的数据是:[外观模式 设计模式]
如果需求改变的话只需要改变 public string GetDealsHtml(string sUname)的实现方式即可。
这就是外观模式 .NET实现。
外观模式的特点:
1:按接口设计,封装业务细节
2:降低类的耦合性
3:和
适配器模式的主要区别在设计意图不同,前者是封装细节,先按照需求设计,后者是统一接口,扩展需求。
接下来说适配器模式,休息。。。。。
-----
天气:大雨,ccdot发表于2007-12-19 11:17:19,阅读了1276次,共有个6回复.