学习的点点滴滴

Email : 107311278@qq.com
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

外观模式

Posted on 2014-01-11 19:35  v薛定谔的猫v  阅读(95)  评论(0)    收藏  举报

场景说明:

             外观模式(Facade)的目的是提供一个接口,通过这个接口可以使一个子系统更容易使用。子系统可能有很多接口

或者访问类,使用外观模式抽象出来共有的对其做一个组合封装。

类图:

 

代码:

namespace Facade
{

    /**//// <summary>
    
/// 子系统一,该子系统仅含有一个类
    
/// </summary>

    public class DrawLine
    {
        private int _point;

        /**//// <summary>
        
/// 构造函数
        
/// </summary>
        
/// <param name="point">画线的数量</param>

        public DrawLine(int point)
        {
            this._point = point;
        }


        /**//// <summary>
        
/// 画下划线
        
/// </summary>

        public void DrawUnderline()
        {
            for (int i = 0; i < _point; i++)
          {
                Console.WriteLine("_");
            }

        }


        /**//// <summary>
        
/// 画中划线
        
/// </summary>

        public void DrawMiddleline()
        ...{
            for (int i = 0; i < _point; i++)
            ...{
                Console.WriteLine("--");
            }

        }

    }


    /**//// <summary>
    
/// 子系统二,该子系统也仅含有一个类
    
/// </summary>

    public class ShowData
    {
        private string  _defaultValue;

        /**//// <summary>
        
/// 构造函数
        
/// </summary>
        
/// <param name="defaultValue">默认值</param>

        public ShowData(string defaultValue)
        {
            this._defaultValue = defaultValue;
        }


        /**//// <summary>
        
/// 显示详细的数据
        
/// </summary>
        
/// <param name="time">参数一</param>
        
/// <param name="outsideValue">参数二</param>

        public void ShowParticularData(int time, string outsideValue)
        {
            for (int i = 0; i < time; i++)
            {
                Console.WriteLine(outsideValue);
                Console.WriteLine("|");
            }

            Console.WriteLine(" ");
        }


        /**//// <summary>
        
/// 显示简单的数据
        
/// </summary>
        
/// <param name="outsideValue"></param>

        public void ShowShortData(string outsideValue)
        {
            Console.WriteLine(_defaultValue + ":" + outsideValue);
        }

    }


    //使用外观模式,向外提供各个子系统的功能
    public class Facade
    {
        private int _times;
        private string _defaultValue;
        private DrawLine dl;
        private ShowData sd;

        public Facade(int times, string defaultValue)
        {
            _times = times;
            _defaultValue = defaultValue;
            dl = new DrawLine(_times);
            sd = new ShowData(_defaultValue); 
        }


        /**//// <summary>
        
/// 完成任务一:画下划线,显示详细的数据
        
/// </summary>

        public void DrawPicture()
        {
            dl.DrawUnderline();
            sd.ShowParticularData(_times, _defaultValue); 
        }


        /**//// <summary>
        
/// 完成任务二:画中划线,显示简单的数据
        
/// </summary>

        public void DrawImage()
        {
            dl.DrawMiddleline();
            sd.ShowShortData(_defaultValue);
        }


    }


    //// <summary>
    
/// 客户类
    
/// </summary>

    public class Client
    {
        private const int _times = 10;
        private const string _defaultValue = "默认值";

        static void Main(string[] args)
      {
            //---------- 非使用Facade模式时,常见的用法--------------------
            Console.WriteLine("非使用Facade模式时,常见的用法. ");
            DrawLine dl = new DrawLine(_times);
            ShowData sd = new ShowData(_defaultValue);            
            dl.DrawUnderline();
            dl.DrawMiddleline();            
            sd.ShowParticularData(_times, _defaultValue);
            sd.ShowShortData(_defaultValue);
            //-------------------结束--------------------------------------
            
//---------- 使用Facade模式的用法--------------------
            Console.WriteLine(" 使用Facade模式的用法. ");
            Facade fc = new Facade(_times, _defaultValue);
            fc.DrawPicture();
            fc.DrawImage();
            //-------------------结束--------------------------------------
        }

    }

}