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/
    声明: 原创博客请在转载时保留原文链接或者在文章开头加上本人博客地址,如发现错误,欢迎批评指正。凡是转载于本人的文章,不能设置打赏功能,如有特殊需求请与本人联系!

  • 相关阅读:
    headfirst设计模式(6)—单例模式
    headfirst设计模式(5)—工厂模式体系分析及抽象工厂模式
    headfirst设计模式(4)—工厂模式
    headfirst设计模式(3)—装饰者模式
    headfirst设计模式(2)—观察者模式
    headfirst设计模式(1)—策略模式
    BeanFactory 与 FactoryBean
    两个List集合取交集、并集、差集
    服务编排
    oracle报错ORA-01843: not a valid month
  • 原文地址:https://www.cnblogs.com/BigBrotherStone/p/facade.html
Copyright © 2011-2022 走看看