风动破

导航

设计模式之facade

http://blog.csdn.net/scucj/article/details/1374657
注意区分Facade模式、Adapter模式、Bridge模式与Decorator模式:
  Facade模式注重简化接口
  Adapter模式注重转换接口
  Bridge模式注重分离接口(抽象)与其实现
  Decorator模式注重稳定接口的前提下为对象扩展功能 

=========================================== 

/// <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();
            //-------------------结束--------------------------------------
        }
    }

posted on 2015-05-04 10:14  风动破  阅读(107)  评论(0)    收藏  举报