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

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#工程源码下载

 

猜你喜欢

转载自blog.csdn.net/coderjyf/article/details/59107990
今日推荐