zoukankan      html  css  js  c++  java
  • Facade外观模式

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

    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) { }
    	 //。。。。一堆用不上的功能
        }
    
    }
    

    如果您认为这篇文章还不错或者有所收获,您可以通过右边的"打赏"功能 打赏我一杯咖啡【物质支持】,也可以点击左下角的【好文要顶】按钮【精神支持】,因为这两种支持都是我继续写作,分享的最大动力!

    作者: 大师兄石头
    来源: https://bigbrotherstone.cnblogs.com/
    声明: 原创博客请在转载时保留原文链接或者在文章开头加上本人博客地址,如发现错误,欢迎批评指正。凡是转载于本人的文章,不能设置打赏功能,如有特殊需求请与本人联系!

  • 相关阅读:
    docker 安装mysql
    Java web项目搭建系列之二 Jetty下运行项目
    Java web项目搭建系列之一 Eclipse中新建Maven项目
    Maven 添加其他Maven组件配置问题
    C# 中定义扩展方法
    Oracle 函数
    【Webservice】2 counts of IllegalAnnotationExceptions Two classes have the same XML type name
    Linux精简版系统安装网络配置问题解决
    Rsync 故障排查整理
    Failed to set session cookie. Maybe you are using HTTP instead of HTTPS to access phpMyAdmin.
  • 原文地址:https://www.cnblogs.com/BigBrotherStone/p/facade.html
Copyright © 2011-2022 走看看