乐在其中设计模式(C#) - 外观模式(Facade Pattern)

【愚公系列】二十三种设计模式(十)-外观模式(Facade Pattern) 设计模式(Design Pattern)是软件开发领域的宝贵经验,是多人反复借鉴和广泛应用的代码设计指导。它们是一系列经过分类和归纳的代码组织方法,旨在实现可重用性、可维护性和可理解性。使用设计模式,我们能够编写高质量的代码,使其更易于他人理解,并提供了代码可靠性的保证。毫无疑问,设计模式对个人、团队和整个系统都带来了显著的益处。它们将代码开发提升到工程化水平,为软件工程构建提供了坚实的基础,就如同大厦的一块块精巧的砖石一样。在项目中明智地应用设计模式可以完美地解决各种复杂问题。 阅读详情
[索引页]
[源码下载]


乐在其中设计模式(C#) - 外观模式(Facade Pattern)


作者: webabcd


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


示例
有一个Message实体类,某对象对它的操作有Get()方法,另外还有一个对象有一个Validate()方法来判断用户是否有权限。现在提供一个高层接口来封装这两个方法。



MessageModel
using  System;
using  System.Collections.Generic;
using  System.Text;

namespace  Pattern.Facade
{
    
/// <summary>
    
/// Message实体类
    
/// </summary>

    public class MessageModel
    
{
        
/// <summary>
        
/// 构造函数
        
/// </summary>
        
/// <param name="msg">Message内容</param>
        
/// <param name="pt">Message发布时间</param>

        public MessageModel(string msg, DateTime pt)
        
{
            
this._message = msg;
            
this._publishTime = pt;
        }


        
private string _message;
        
/// <summary>
        
/// Message内容
        
/// </summary>

        public string Message
        
{
            
get { return _message; }
            
set { _message = value; }
        }


        
private DateTime _publishTime;
        
/// <summary>
        
/// Message发布时间
        
/// </summary>

        public DateTime PublishTime
        
{
            
get { return _publishTime; }
            
set { _publishTime = value; }
        }

    }

}


User
using  System;
using  System.Collections.Generic;
using  System.Text;

namespace  Pattern.Facade
{
    
/// <summary>
    
/// 用户相关类
    
/// </summary>

    public class User
    
{
        
/// <summary>
        
/// 验证用户是否合法
        
/// </summary>
        
/// <param name="userId">UserId</param>
        
/// <returns></returns>

        public bool Validate(string userId)
        
{
            
if (userId == "admin")
            
{
                
return true;
            }

            
else
            
{
                
return false;
            }

        }

    }

}


SqlMessage
using  System;
using  System.Collections.Generic;
using  System.Text;

namespace  Pattern.Facade
{
    
/// <summary>
    
/// Sql方式操作Message
    
/// </summary>

    public class SqlMessage
    
{
        
/// <summary>
        
/// 获取Message
        
/// </summary>
        
/// <returns></returns>

        public List<MessageModel> Get()
        
{
            List
<MessageModel> l = new List<MessageModel>();
            l.Add(
new MessageModel("SQL方式获取Message", DateTime.Now));

            
return l;
        }

    }

}


Message
using  System;
using  System.Collections.Generic;
using  System.Text;

namespace  Pattern.Facade
{
    
/// <summary>
    
/// Facade类
    
/// </summary>

    public class Message
    
{
        
private string _userId = "";

        
/// <summary>
        
/// 构造函数
        
/// </summary>
        
/// <param name="userId">UserId</param>

        public Message(string userId)
        
{
            
this._userId = userId;
        }


        
/// <summary>
        
/// 获取Message
        
/// 首先使用User类的Validate()方法验证用户是否合法
        
/// 然后使用SqlMessage类的Get()方法获取Message
        
/// </summary>
        
/// <returns></returns>

        public List<MessageModel> Get()
        
{
            User u 
= new User();
            SqlMessage m 
= new SqlMessage();

            
if (u.Validate(_userId))
            
{
                
return m.Get();
            }

            
else
            
{
                List
<MessageModel> l = new List<MessageModel>();
                l.Add(
new MessageModel("无权获取", DateTime.Now));

                
return l;
            }

        }

    }

}



client
using  System;
using  System.Data;
using  System.Configuration;
using  System.Collections;
using  System.Web;
using  System.Web.Security;
using  System.Web.UI;
using  System.Web.UI.WebControls;
using  System.Web.UI.WebControls.WebParts;
using  System.Web.UI.HtmlControls;

using  Pattern.Facade;

public  partial  class  Facade : System.Web.UI.Page
{
    
protected void Page_Load(object sender, EventArgs e)
    
{
        Message m 
= new Message("user");
        Response.Write(m.Get()[
0].Message + " " + m.Get()[0].PublishTime.ToString());
        Response.Write(
"<br />");

        m 
= new Message("admin");
        Response.Write(m.Get()[
0].Message + " " + m.Get()[0].PublishTime.ToString());
        Response.Write(
"<br />");
    }

}


运行结果
无权获取 2007-3-20 22:16:50
SQL方式获取Message 2007-3-20 22:16:50


参考
http://www.dofactory.com/Patterns/PatternFacade.aspx


OK
[源码下载]
设计模式(C#)——09外观模式 推荐阅读: &amp;amp;nbsp;我的优快云 &amp;amp;nbsp;我的博客园 &amp;amp;nbsp;QQ群:704621321 &amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp;&amp;amp;nbsp; 阅读详情

相关推荐

C# web 漂亮的界面及组件

C# web 漂亮的界面及组件;C# web 漂亮的界面及组件;C# web 漂亮的界面及组件

C# 设计模式之外观模式

C# 设计模式之外观模式

鲤籽鲲的博客 1508

C#设计模式-外观模式

C#设计模式-外观模式

C#设计模式之外观模式

外观模式 文章目录外观模式模式分类模式产生的原因模式灵感的来源模式类图代码实现外观模式总结外观模式的优点:外观模式的缺点: 本篇博客将介绍外观模式,外观模式是一种使用频率非常高的设计模式,它通过引入一个外观角色来简化客户端与子系统之间的交互,为复杂的子系统调用提供一个统一的入口,使子系统与客户端的耦合度降低,且客户端调用非常方便。 模式分类 结构型设计模式。 模式产生的原因 在软件开发中,当我们需要访问一系列子系统来完成一个功能,此时由于涉及的类比较多,导致使用时代码就会比较复杂。而这些需要交互的类又经常会

BraveRunTo的博客 791

保姆级教程:用PROGRAM_FTDI搞定Xilinx FPGA的JTAG调试器(基于FT232/FT2232/FT4232)

本文详细介绍了如何使用FT232/FT2232/FT4232系列芯片通过PROGRAM_FTDI工具配置Xilinx FPGA的JTAG调试器。从芯片选型、驱动安装到固件烧写和Vivado验证,提供了完整的实操指南和避坑要点,帮助开发者低成本实现高效调试。

weixin_29271053的博客 2153

单片机按键识别篇---单击---双击----长按

  最近做一任务需要使用一个按键实现三种功能,分别是按键单击功能,按键双击功能和按键长按功能,可能之前没有接触过这类按键复用情况,顶多也只是简单识别单击和长按,没有想过双击以上按键功能,也是绞尽脑汁,想了半天,又上网看了些例程,算是对于按键的识别有点小小的了解,感觉这个功能挺实用,在此做个随笔。 一、思路   1.识别长按操作思路:我们使用系统定时器定时,然后让系统每过一段时间去扫描按键I/O...

weixin_30311605的博客 3660

C#编程模式之外观模式

创作背景:给位伙伴,五一小长假结束,我们继续对C#编程之路进行探索。本文将继续编程模式的研究,主要介绍外观模式。外观模式也称为门面模式,是一种结构型设计模式,它的目的是为子系统中的一组接口提供一个统一的高层接口,使各子系统更容易使用。它隐藏了子系统的复杂性,方便使用者访问。外观模式主要有两大部分组成,一个是外观,即高层可访问的接口类;一个是子系统,即实现具体功能的部分,通常包括多个类和接口。

weixin_50236846的博客 568

OLED 驱动模块程序代码

作为嵌入式软件开发,可能经常会使用单片机连接驱动显示屏,实现人机交互的功能,通常可选择的有 OLED 和 LCD 等,其中相关驱动代码例程网上更是数不胜数。 本文介绍的是 OLED, 常见代表有 0.96 寸的OLED,网上也有很多相关的驱动代码,但是大部分代码都是能用即可,不是特别关注驱动代码的整体架构,以下是个人整理的 OLED 驱动代码,支持配置 SPI 和 IIC 两种接口方式(目前只是测试了 SPI,IIC 有待验证)。

大橙子的博客 4290

C# 设计模式(七)外观模式(unity演示)

1、引言 2、外观模式详细介绍 2.1、定义 2.2、作用 2.3、解决的问题 2.4、模式的原理 2.5、类图实现 2.6、C#举例 3、外观模式优缺点 4、外观模式适用场景 5、应用举例(unity) 6、与适配器模式的区别 7、总结 8、unity工程下载 1、引言   在软件开发过程中,客户端程序经常会与复杂系统的内部子系统进行耦合,从而导致客户端程...

对酒当歌﹏✍ 587

如何构建智能聊天系统

聊天分为听、思考、读,简单的通过ASR、LLM、TTS三类模型的组合可以实现,最近openai推出支持多模态的GPT-4o模型,可以把三个模型真正融合成在一起。现在市面上的模型百花齐放,各有所长。要实现可落地的方案,需要结合业务,验证模型效果,同时也要考虑方案的可行性,有些模型在国内能用,有些在国内不能用。

xsgnzb的专栏 2107

R语言实战:非正态数据下的Scheirer–Ray–Hare检验全流程解析

本文详细解析了在R语言中执行Scheirer–Ray–Hare检验的全流程。当实验数据不符合正态分布时,该非参数检验是分析两因素设计(包括主效应和交互效应)的有效工具。文章从原理、环境配置、数据导入、核心代码到结果解读与报告撰写,提供了完整的实战指南,并附有常见的避坑建议。

weixin_29061465的博客 398

C# 外观模式

外观模式(Facade Pattern)是一种结构型设计模式,它提供了一个统一的接口,用于访问子系统中的一组接口。外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式是迪米特法则的一种具体实现,通过引入一个新的外观角色可以降低原有系统的复杂度,同时降低客户类与子系统的耦合度。1 外观类(Facade):在外观角色中可以知道相关的(一个或者多个)子系统的功能和责任;2 子系统类集合(SubSystem Classes):子系统类集合实现了子系统的功能,处理外观类对象指派的任务。

熊思雨的博客 1325

基于STM32的电子时钟设计

基于STM32的电子时钟设计1、设计目的2、设计具体要求3、proteus仿真图4、程序代码 1、设计目的 (1)掌握使用KEIL MDK5进行软件开发的具体流程; (2)掌握硬件电路的设计方法; (3)掌握STM32微控制器的程序设计及代码编写方法。 2、设计具体要求 (1)通过STM32自带的实时时钟功能获取时间信息; (2)在OLED显示屏上显示日期、时、分、秒等时间信息; (3)通过按键可对时间信息进行修改; (4)具有闹钟设定功能; (5)加分项:自行增加其他功能。 3、proteus仿真图 4

唯一的博客 2万+

​​​​​​​深入解析外观模式(Facade Pattern)及其应用 C#

在家庭影院系统中,我们有多个子系统:音响系统、投影仪、蓝光播放器等。每个子系统类有不同的功能方法。// 子系统1:音响系统// 子系统2:投影仪// 子系统3:蓝光播放器接下来,我们定义外观类,它将多个子系统的操作封装在一起,提供一个简化的接口。// 外观类:家庭影院// 观看电影// 结束电影。

net core ,前端 ,python 全栈开发 1213

立创EDA开源足轮机器人:基于STM32F407与ESP32的LQR自平衡与FOC驱动设计全解析

本文详细解析了基于立创EDA平台的开源足轮机器人项目。该项目采用STM32F407作为主控,ESP32负责无线通信,并应用LQR自平衡算法与FOC驱动技术,实现了机器人的稳定站立、移动转向及复杂地形适应能力。文章深入剖析了其硬件架构、软件设计及调试经验,为机器人运动控制学习提供了宝贵参考。

weixin_42608299的博客 232

android11.0 Launcher3 高端定制之循环滑动

待机界面可以向左、向右循环切换页面 效果图 修改清单 packages/apps/Launcher3/res/values-zh-rCN/strings.xml packages/apps/Launcher3/res/values/config.xml packages/apps/Launcher3/res/values/strings.xml packages/apps/Launcher3/res/xml/launcher_preferences.xml packages/apps/Launc

cczhengv 1548

【C#设计模式】10.外观模式(Facade Pattern)【结构型】

1.1 动机(Motivate) 在软件系统开发的过程中,当组件的客户(即外部接口,或客户程序)和组件中各种复杂的子系统有了过多的耦合,随着外部客户程序和各子系统的演化,这种过多的耦合面临很多变化的挑战。如何简化外部客户程序和系统间的交互接口?如何将外部客户程序的演化和内部子系统的变化之间的依赖相互解耦? 1.2 意图(Intent) 为子系统中的一组接口提供一个一致的界面,Facade模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。      ——《设计模式》GoF .........

星Yeah 的博客 2005

锂电池充电器电路设计 里面有电路

锂电池充电器电路设计 里面有电路 3.7V升压到5V电路设计。

23种设计模式之《外观模式(Facade)》在c#中的应用及理解

外观模式是一种结构型设计模式,它为复杂的子系统提供一个简化的接口。外观模式通过定义一个高层接口,使得客户端更容易使用子系统,而无需了解其内部的复杂性。外观模式通过提供一个简化的接口,隐藏了系统的复杂性,使得客户端更容易使用系统。它特别适用于复杂系统,可以将客户端与子系统解耦,使得子系统的变化不会影响到客户端。在实际应用中,外观模式可以用于简化API、分层设计等场景。

yuanpan的专栏 1142

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

IMSL CNL 7.0.0 (x86-64)Crack

IMSL CNL 7.0.0 (x86-64)Crack intel的算法库破解文件,这是C++版本的破解文件

C#设计模式读书笔记之外观模式(Facade pattern)

外观模式(Facade pattern)【使用频率:★★★★★】 1. 概述   为复杂的子系统中提供一个统一的入口,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式是迪米特法则的一种具体实现,通过引入一个新的外观角色可以降低原有系统的复杂度,同时降低客户类与子系统的耦合度。 2. 模式中的角色   2.1 外观类(Facade):在外观角色中可以知道相关的(一个或...

qq826364410的专栏 262

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

C#设计模式

C#常用设计模式摘要(150字): 本文介绍了C#中五种创建型设计模式:1) 单例模式确保类唯一实例,适用于全局对象;2) 工厂模式封装对象创建逻辑,通过统一接口生成不同产品;3) 抽象工厂创建产品族,无需指定具体类;4) 建造者模式分离复杂对象的构建与表示,支持多样化配置;5) 原型模式通过克隆而非新建来复制对象。每种模式均包含C#代码示例和典型应用场景,如日志系统、配置管理等。这些模式可有效提升代码复用性和灵活性。

weixin_61819056的博客 1468

D11:C#设计模式之十外观模式(Facade Pattern)【结构型】

一、引言 快12点半了,要开始今天的写作了。很快,转眼设计模式已经写了十个了,今天我们要讲【结构型】设计模式的第五个模式,该模式是【外观模式】,英文名称是:Facade Pattern。我们先从名字上来理解一下“外观模式”。我看到了“外观”这个词语,就想到了“外表”这个词语,两者有着很相近的意思。就拿谈恋爱来说,“外表”很重要,如果第一眼看着很舒服、有眼缘,那就有交往下去的可能。如...

. 533

C# 设计模式:第十章 - 结构型模式 之 外观模式(Facade Pattern)

在这章中,我们学习了外观模式的基本概念、应用场景、实现方法以及注意事项。外观模式提供了一个简化的接口,隐藏了子系统的复杂性,使得客户端代码可以更加简洁、易读和易维护。它在简化复杂系统的使用方面有着重要的作用,如智能家居控制系统、视频游戏角色创建等。我们通过两个实际的代码示例展示了如何在 C# 中实现外观模式,包括基本的外观模式和智能家居控制系统的应用。最后,我们还讨论了一些使用外观模式时需要注意的地方,帮助你在实际开发中做出明智的选择。

caifox的博客 966

C#设计模式——外观模式(Facade Pattern)

一、引言 在软件开发过程中,客户端程序经常会与复杂系统的内部子系统进行耦合,从而导致客户端程序随着子系统的变化而变化,然而为了将复杂系统的内部子系统与客户端之间的依赖解耦,从而就有了外观模式,也称作 ”门面“模式。下面就具体介绍下外观模式。 二、外观模式的详细介绍 2.1 定义 外观模式提供了一个统一的接口,用来访问子系统中的一群接口。外观定义了一个高层接口,让子系统更容易使用。使用外观模式时,我们创建了一个统一的类,用来包装子系统中一个或多个复杂的类,客户端可以直接通过外观类来调用内部子系统中方法

dxm809的博客 246
上一篇: [翻译]通过WebService调用SQLXML(SQL Server 2005)
下一篇: [翻译]如何使用webservice作为数据源去生成Microsoft Reporting Services 2005的报表
webabcd
博客等级 码龄17年 28粉丝 911原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值