C#设计模式--外观模式

来源:互联网 发布:模拟考驾照软件 编辑:程序博客网 时间:2024/06/07 17:59

0.C#设计模式--简单工厂模式

1.C#设计模式--工厂方法模式

2.C#设计模式--抽象工厂模式

3.C#设计模式--单例模式

4.C#设计模式--建造者模式

5.C#设计模式--原型模式

6.C#设计模式--适配器模式

7.C#设计模式--装饰器模式

8.C#设计模式--代理模式

设计模式:

外观模式(Facade Pattern)

简单介绍:

外观模式(Facade Pattern):

外观模式(Facade)的定义:为子系统中的一组接口提供一个一致的界面,用来访问子系统中的一群接口。

比如调用子系统1和子系统2的Print方法,如果没有外观模式那么你需要一个个的调用,子系统如果是少还好,多了就要疯了,这里就可以使用外观模式,调用外观模式对外提供的方法一次性完成对子系统的层层调用

生活实例:比如笔记本是一个整体,看似是一件东西,实际上只是将主机和显示器组装在一起而已,对外提供一个电源按钮,当按下电源按钮的时候,启动了主机和显示器,这里的这个电源按钮就差不多是外观模式。对外只提供了一个电源按钮。

外观模式组成:

Facade:负责子系统的的封装调用

Subsystem Classes:具体的子系统,实现由外观模式Facade对象来调用的具体任务

外观模式类图:

外观模式C#代码举例:

SubSystem1:子系统1

    /// <summary>    /// 子系统1    /// </summary>    public class SubSystem1    {        public void Print1()        {            Console.WriteLine("SubSystem1");        }    }

SubSystem2:子系统2类

    /// <summary>    /// 子系统2    /// </summary>    public class SubSystem2    {        /// <summary>        /// 子系统2        /// </summary>        public void Print2()        {            Console.WriteLine("SybSystem2");        }    }

Facade:外观模式对外提供接口类

    /// <summary>    ///  外观模式对外接口类    /// </summary>    public class Facade    {        private SubSystem1 _subSystem1;        private SubSystem2 _subSystem2;        public Facade()        {            _subSystem1 = new SubSystem1();            _subSystem2 = new SubSystem2();        }        public void Print()        {            _subSystem1.Print1();            _subSystem2.Print2();        }    }

用户测试类:

    /// <summary>    /// 客户端测试类    /// </summary>    class Client    {        static void Main(string[] args)        {            Facade facade = new Facade();            facade.Print();            Console.Read();        }    }

运行结果:

外观模式生活实例笔记本例子:

生活实例:比如笔记本是一个整体,看似是一件东西,实际上只是将主机和显示器组装在一起而已,对外提供一个电源按钮,当按下电源按钮的时候,启动了主机和显示器,这里的这个电源按钮就差不多是外观模式。对外只提供了一个电源按钮。

假设笔记本是由来个子系统:显示器和主机组成

当按下电源按钮,开启主机和显示器

外观模式生活实例笔记本例子类图:


外观模式生活实例笔记本例子C#代码:

PC_Monitor:笔记本显示器类

    /// <summary>    /// 笔记本显示器    /// </summary>    public class PC_Monitor    {        public void Open()        {            Console.WriteLine("开启显示器");        }        public void Close()        {            Console.WriteLine("关闭显示器");        }    }

PC_Host:笔记本主机类

    /// <summary>    /// 笔记本主机    /// </summary>    public class PC_Host    {        public void Open()        {            Console.WriteLine("开启主机");        }        public void Close()        {            Console.WriteLine("关闭主机");        }    }

PC_Facade:笔记本外观模式对外接口类

    /// <summary>    /// 笔记本对外接口类    /// </summary>    public class PC_Facade    {        private PC_Monitor _PC_Monitor;        private PC_Host _PC_Host;        public PC_Facade()        {            _PC_Monitor = new PC_Monitor();            _PC_Host = new PC_Host();        }        public void Open()        {            Console.WriteLine("开机……");            _PC_Monitor.Open();            _PC_Host.Open();        }        public void Close()        {            Console.WriteLine("关机……");            _PC_Host.Close();            _PC_Monitor.Close();        }    }

用户测试代码:

    class Client    {        /// <summary>        /// 用户测试类        /// </summary>        /// <param name="args"></param>        static void Main(string[] args)        {            PC_Facade pc_facade = new PC_Facade();            //开机            pc_facade.Open();            //关机            pc_facade.Close();            Console.Read();        }    }

运行结果:

外观模式C#工程源码下载

 

0 0
原创粉丝点击