播客 > 设计模式  >  外观模式 .Net(c#) 介绍  | 登录  | RSS订阅地址  | Code平台

外观模式 .Net(c#) 介绍


外观模式,正如其名,在开发中,经常会遇到涉及到很多对象的关联操作,例如,处理一个根据用户名获取该用户信息的需求:

 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回复.

以后写东西先给我过目 如果看不懂的话拿回去修改
一直改道深入浅出为目的
像这篇文章 典型的烂文 知道的不用看 不知道的看了还是不知道 

niceidea post in 2007-12-19 16:57:51 #1  

好的,难得许总亲自出来指点!

ccdot post in 2007-12-19 20:11:23 #2  

年青人要谦虚谨慎 不要成天许总许总的 

niceidea post in 2007-12-21 11:13:11 #3  

忙完公司的事再说,模式我现在还没怎么碰。。。

叶子 post in 2007-12-22 10:03:00 #4  

哈,可以理解不被支持

ccdot post in 2007-12-22 11:41:29 #5  

看不懂,没有说明

顺其自然 post in 2008-4-6 11:49:03 #6  
  1. 想要转载我文章的人滚远远的,能想多远,就滚多远。
  2. 不要提交任何带有网址URL信息的评论.
  3. 需要更多信息?请使用站内搜索,郁闷了?听听我在听什么吧!
用户名:*验证:看不清楚请点击刷新验证码*
内容: