Facade外观模式

>>返回《C#常用设计模式》

  • 1. 简介
  • 2. 示例

1. 简介

  1. 概述

    • 为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用

      • 比如对同一种类型但不同厂家的设备:摄像头、人脸识别设备、RFID读卡器等
  2. 模式中的角色

    1. 外观类(Facade):外观类知道哪些子系统类负责处理请求,将客户的请求代理给恰当的子系统对象。
    2. 子系统类集合(SubSystem Classes):子系统类集合实现了子系统的功能,处理外观类对象指派的任务
  3. 类图

2. 示例

namespace WindowsFormsApplication1
{
    class Program
    {
        static void Main()
        {
            IDevice d1 = new FHCardReader();
            d1.Open();
            d1.Send("GpoHigh");
            d1.Close();

            IDevice d2 = new ImpinjCardReader();
            d2.Open();
            d2.Send("GpoHigh");
            d2.Close();
        }
    }

    //Facade
    public interface IDevice
    {
        void Open();
        void Close();
        void Send(string msg);
    }
    //ConcreteFacadeA
    public class FHCardReader : IDevice
    {
        FHReader reader = new FHReader();
        FHGpo gpo = new FHGpo();
        public void Open()
        {
            reader.Connect();
        }
        public void Close()
        {
            reader.DisConnect();
        }
        public void Send(string msg)
        {
            switch (msg)
            {
                case "Config": reader.ApplyConfig(); break;
                case "GpoHigh": gpo.SetGpo(true); break;
                case "GpoLow": gpo.SetGpo(false); break;
                default:
                    break;
            }
        }

        public void Send()
        {
            throw new NotImplementedException();
        }
    }
    //ConcreteFacadeB
    public class ImpinjCardReader : IDevice
    {
        ImpinjReader reader = new ImpinjReader();
        public void Open()
        {
            reader.Connect();
        }
        public void Close()
        {
            reader.DisConnect();
        }
        public void Send(string msg)
        {
            switch (msg)
            {
                case "Config": reader.ApplyConfig(); break;
                case "GpoHigh": reader.SetGpo(true); break;
                case "GpoLow": reader.SetGpo(false); break;
                default:
                    break;
            }
        }
    }
    //AnApi
    public class ImpinjReader
    {
        public void Connect(){}
        public void DisConnect() { }
        public void ApplyConfig() { }
        public void SetGpo(bool state) { }
 //。。。。一堆用不上的功能
    }
    //B1Api
    public class FHReader
    {
        public void Connect() { }
        public void DisConnect() { }
        public void ApplyConfig() { }
 //。。。。一堆用不上的功能
    }
    //B2Api
    public class FHGpo
    {
        public void SetGpo(bool state) { }
 //。。。。一堆用不上的功能
    }

}
(0)

相关推荐

  • 无废话设计模式(10)结构型模式--外观模式

    0-前言 外观模式定义:为子系统中的一组接口提供一个一致的界面,此模式定了一个高层接口    这一接口使得这一子系统更加容易使用: 1-实现 1-1.简单UML图: 1-2.代码实现 //1.子系统A ...

  • 设计模式:外观模式

    外观模式(Facade) 介绍:为子系统中的一组接口提供一个统一的入口.外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 外部应用程序不用关心内部子系统的具体细节,这样会大大降低应用程 ...

  • 设计模式之☞外观模式

    简介 外观模式(Facade Pattern):外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易 ...

  • 详解JAVA面向对象的设计模式 (四)、外观模式

    外观模式 Facade 外观模式内容相对简单,就不写新的例子了.本篇文章摘录自 http://c.biancheng.net/view/1369.html 外观模式的定义与特点 外观(Facade)模 ...

  • 设计模式-外观模式

    定义 为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 为了方便理解,我们可以看看下图,左边是未使用外观模式时,外部客户端直接调用企业中的各个子 ...

  • PHP设计模式—外观模式

    定义: 外观模式(Facade):又叫门面模式,为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用. 代码实例: 假设实现一个功能需要用到子系统中的四 ...

  • 深入浅出《设计模式》之外观模式(C++)

    前言 模式介绍 外观模式相比较之下比较简单,模式设计中定义是为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口是的这一子系统更加容易使用. 如果不理解呢,简单些说就是外观模式提 ...

  • 结构型模式:外观模式

    七大结构型模式之五:外观模式. 简介 姓名 :外观模式 英文名 :Facade Pattern 价值观 :统一口径.一致对外 个人介绍 : Provide a unified interface to ...

  • 结合Mybatis源码看设计模式——外观模式

    定义 提供了一个统一的接口,用来访问子系统中一群接口 适用场景 子系统复杂,增加外观模式提供简单调用接口 构建多层系统结构,用外观对象作为每层入口 详解 外观模式,主要理解外观.通俗一点可以认为这个模 ...