astron设计模式学习手记之门面模式

设计模式:代理模式,适配器模式,装饰模式,门面模式,策略工厂的区别 老生常谈的问题,网上一搜一大把,但是不写下来,依然经常出现理解上的偏差,包括在实际的开发使用中,一些模式经常写串,因此将个人的一些理解写下来,争取做到言简意赅,能一句话总结的,绝不啰嗦第二句。 先上一个设计模式的整体分类图 创造型模式主要解决类的实例化过程。 结构型模式主要解决类和方法的组合问题。 行为型模式主要解决类的交互、职责问题。 1,代理模式 UML实例图: ... 阅读详情

门面模式

图解设计模式第15章

facade

facade建筑物的正面
别名:外观模式

如下图,像在线客服对用户而言就是一个门面。它封装了很多业务逻辑。比如客户咨询商品价格问题,客服需要咨询的是销售人员。客户反馈没有收到商品,客服需要联系配送。客服反映商品没开发票,客服需要联系仓储开票人员。遇到领券失败需要咨询市场部,遇到返修退换货需要联系售后部门甚至厂家。有了这个门面,客户不需要直接与内部系统打交道,直接联系客服就好了。
假如说,客服让用户直接联系公司的财务人员,或者厂家,那用户体验就会差到极点。现实当中就有这种例子。
Paste_Image.png

Paste_Image.png
Paste_Image.png

Paste_Image.png
后续:1代理模式和门面模式的区别
思考:按照上面的逻辑,门面模式跟策略模式是不是可以很好结合呢?因为门面模式后面需要不同的策略来执行?比如我们拨打10000号,针对这个门面,我们按照语音提示选择了1-9不同的按键,相当于new 出来了策略,然后走不同的流程就行了。
符合高内聚
可以这么说,凡是用户体验好的,操作简单的都是外观模式:
http://blog.youkuaiyun.com/zhangmeihong2/article/details/43097715
背景:股票1、2、3、国债1、房地产1等这些都具有相同的方法:买入、卖出。于是,抽象出一个基金类,基金由以上类聚合而成,那么客户端只需认识基金即可,不需理解其内部,即股票、国债和房地产等。这样一来,就解决了对股票、国债、房地产不熟悉的人的买股问题,他们只需买基金即可,不需要具体知道买的是什么。
特点:一组类似的类(股票一、二、三、国债、房地产)——聚合——一个类(基金)。客户端识别这一个类(基金),即可方便使用这一组类(股票一、二、三、国债、房地产)。
用到的原则:依赖倒转原则和迪米特法则。
优点:1、迪米特法则使得客户端简单;2、便于扩展。
缺点:多定义了一个类。
感受:之所以叫外观模式,可能是因为此模式,不需你具体了解股票、国债、房地产等,只需你知道基金这个表层即可。
导诊员也是门面
参考:linux内核中的门面
http://blog.youkuaiyun.com/dog250/article/details/5303231
参考:action和dao
http://blog.youkuaiyun.com/zuoxiaolong8810/article/details/9151203

千万要注意:

Paste_Image.png
Paste_Image.png

Paste_Image.png

上代码:
子系统1,这里没有用接口

public class SubSystem1 {
    public void method1(){
        System.out.println("method1");
    }
}

子系统2

public class SubSystem2 {
    public void method2(){
        System.out.println("method2");
    }
}

子系统3

public class SubSystem3 {
    public void method3(){
        System.out.println("method3");
    }
}

用来模拟系统1和3组合起来的流程

public class ComplexSystem13 {
    private SubSystem1 subSystem1 = new SubSystem1();
    private SubSystem3 subSystem3 = new SubSystem3();

    public void method13(){
        subSystem1.method1();
        subSystem3.method3();
        System.out.println("在新定义的类中完成了1和3两个流程,流程结束");
    }
}

最重要的门面

public class Facade {
    private SubSystem1 subSystem1 = new SubSystem1();
    private SubSystem2 subSystem2 = new SubSystem2();
    private SubSystem3 subSystem3 = new SubSystem3();
    private ComplexSystem13 ComplexSystem13 = new ComplexSystem13();

    //这里最好把new放在对象构造方法中
    public void doSomething1(){
        subSystem1.method1();
    }

    public void doSomething2(){
        subSystem2.method2();
    }

    public void doSomething3(){
        subSystem3.method3();
    }

    public void doSomethingComplex(){
        ComplexSystem13.method13();
    }

}

客户端,直接与门面打交道。没有调用子类的业务。

public class Client {
    public static void main(String[] args) {
        Facade fc =new Facade();
        System.out.println("//测试单类方法");
        fc.doSomething1();
        System.out.println("=========================");
        System.out.println("//测试复合方法");
        fc.doSomethingComplex();

    }
}

大工告成
下一篇:调停者模式

Mybatis源码解析(五)-接口绑定阶段(门面模式+策略模式) @[TOC] 代理封装阶段—》 门面模式+策略模式 #当前阶段可以说是MyBatis 最神秘的阶段,要理解它,就需要对 Mybatis 的接口层和 binding模块数据源模块进行深入的学习。首先mybatis内部虽然有各种配置文件解析,数据封装,sql执行等复杂的流程,但是基本上都可以通过SqlSession接口进行操作,这种设计就是运用了门面模式;另外mybatis支持通过配置文件灵活配置连接数据库的时候是否使用连接池,这种对操作的封装也是运用了策略模式来实现。下面来详细介绍。 part1:门面模式 阅读详情

相关推荐

设计模式(java) ------ 工厂模式+策略模式+门面模式

场景:设计一个交易系统中的子模块------扣款子模块 扣款子模块中主要包括两部分: 1.IC卡类和交易信息类 其中IC卡中包括两种金额:固定金额和自由金额;交易信息类负责记录每一笔交易。 2.扣款策略类 扣款策略有以下两种: a. IC卡固定金额 = IC卡现有固定金额-交易金额/2     IC卡自由金额 = IC卡自由金额-交易金额/2 b. 全部消费从IC卡自由金额中扣

noobzc的专栏 3502

不同类型模式对比(策略模式 VS 桥梁模式——中介者模式 VS 门面模式)

策略模式VS桥梁模式 策略模式:是使用继承和多态建立一套可以自由切换算法的模式;只有一个抽象角色,可以没有实现,也可以有很多实现。 桥梁模式:是在不破坏封装的前提下解决抽象和实现都可以独立扩展的模式。有两个“桥墩”——抽象化角色和实现化角色,只要桥墩搭建好,桥就有了。 策略模式和桥梁模式两者的通用类图非常相似,只相差了图中红框区域,其中左图为策略模式,右图为桥梁模式。 (1)策略模式 邮件一般有两种格式:文本邮件(Text Mail)和超文本邮件(HTML MaiL)。使用策略模式发送邮件,..

肥羊汤 1827

flink系列2 wordcount测试(windows)

参考文档 https://ci.apache.org/projects/flink/flink-docs-master/quickstart/setup_quickstart.html windows上测试,linux上2017年4月的存档中有 1、准备工具。在百度或者google上搜索netcat-win32-1.11.zip。 运行nc64 -l -p 9099。启动监听程序 2、安

dataastron的博客 2369

适配器模式,门面模式,代理模式,装饰器模式,桥接模式,策略者模式的作用总结。

适配器模式,主要解决的是接口的兼容性,为复用原有接口做一些适配。 门面模式,主要解决一组接口的易用性问题。如果接口过多的话可以打包成一个接口,用户只需要使用一个接口就可以操作多个接口。 代理模式,主要是对已有接口功能性的增加,增加的功能与原来的功能没有直接性的关系。 装饰器模式,也是对已有功能的增强。是对已有接口功能的增强,比如读写字节,使用装饰器之后可以做成带缓冲的读写字节。 桥接模式,主要是为了提高同一种类的类的复用性,减少同一类型的类成倍增加的问题。主要是抽象和实现相分离。本质是利用java的

qq_40207976的博客 362

TouchGFX使用教程(三)

TouchGFX使用教程(三)界面事件控件修改方法图片等资源放置位置 界面事件 控件修改方法 图片等资源放置位置

yuanzhan11的专栏 6972

避坑指南:RK3588上编译EtherCAT 1.6时遇到的权限问题和模块安装错误

本文详细解析了在RK3588平台上编译EtherCAT 1.6时常见的权限问题和模块安装错误,提供了两种实战解决方案和嵌入式开发的通用权限管理策略。通过优化内核配置和编译参数,显著提升实时性能,帮助开发者高效完成EtherCAT主站部署。

weixin_33724046的博客 453

设计模式 -- 策略+门面

1、策略模式的合理运用 2、门面模式配合策略模式屏蔽上层模块实现

知识点滴 917

从仿真到实体:基于Isaac Gym的X20机械狗与Kinova Gen3 Lite机械臂全身协同控制实战

本文详细介绍了基于Isaac Gym仿真平台,实现云深处X20机械狗与Kinova Gen3 Lite机械臂全身协同控制的完整实战流程。内容涵盖环境搭建、模型适配、分阶段训练策略、域随机化技巧,以及最终将训练好的策略安全部署到实体机器人的关键步骤,为复杂机器人系统的仿真到实体迁移提供了宝贵经验。

yhn45678901的博客 489

工厂模式+门面模式+策略模式的易懂易记示例

代码模拟这样一个场景:客户要盖房子,需要去劳务市场找个合适的包工头来承包自己的工程,找到了合适的包工头,最后开工。 客户盖房子流程图....大概就这么个意思 我按照自己的理解用代码来逐一剖析、实现这个场景: 1、盖房子的步骤都是大同小异的,比如所有的盖房子都是打地基、垒砖 /** * @Auther: liuzujie * @Date: 2020...

悲观是一种远见 778

「自然语言驱动生产力」23. 科研神器:DeepSeek+EndNote实现文献智能综述

摘要:传统文献综述面临周期长、漏检率高、数据整合繁琐等痛点,某985课题组数据显示,4人团队完成一篇综述平均需5个月,重要成果遗漏率达25%。本文提出基于DeepSeek+EndNote的智能综述方案,通过“自然语言解析→精准检索→智能筛选→自动生成”四步流程实现全自动化。核心技术包括检索式智能生成算法、文献优先级评分模型、可视化图表自动生成工具及结构化综述框架引擎。实际应用中,文献调研周期从3-6个月缩短至2周,重要成果遗漏率降至3%以下,图表制作时间完全解放。某课题组采用该方案后,1人3周完成的综述被A

专注于人工智能、软件开发、工控自动化、工厂数字化及智能化等领域,希望和大家共同进步! 1665

泰凌微8258入门教程 环境篇④——开发板+烧录器 8258mesh新手套件购买

工欲善其事,必先利其器。 淘宝链接:https://item.taobao.com/item.htm?

4128

代理模式和门面模式模式

代理模式和门面模式模式1.引言    看设计模式的时候看到代理模式,想起门面者模式,比较俩者,发现的不同之处,随便写写博客加深印象。2.讲解代理(Proxy)模式所谓代理,就是一个人或者一个机构代表另一个人或者另一个机构采取行动。在一些情况下,一个客户不想或者不能够直接引用一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用。举一个例子:消费者一般在超时买东西,超市充当着代理的角色,而厂商...

阿东的博客 3246

RedCap:一种通信技术的概述

总结起来,RedCap是一种基于数据包交换的通信技术,它提供了一种高效、可靠的数据传输机制。通过使用RedCap,我们可以轻松地发送和接收数据包,并确保数据的完整性和正确性。在上面的示例中,我们首先导入了RedCap库,并创建了一个RedCap实例。然后,我们定义了目标地址和源地址,并创建了一个数据包,其中包含了目标地址、源地址和要发送的数据。本文将介绍RedCap的基本原理和使用方法,并提供一些相关的源代码示例。RedCap还提供了其他一些功能,如数据包的重传机制、流量控制和拥塞控制等。

YgjWeb的博客 900

门面模式、代理模式、适配器模式的区别

门面模式、代理模式、适配器模式,这三种模式都很接近,他们的区别是: 1、门面模式: 为子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,简化了系统的使用; 银行柜台办理业务可以理解为门面模式的一种,客户通过银行柜台办理业务,无需了解银行内部复杂的业务逻辑处理,柜台办理员只是把银行能提供的业务为客户端办理,银行没有提供的服务,柜台办理员也无法办理的。 2、代理模式: 为...

weixin_30699235的博客 419

Java 大视界 -- 基于 Java+Flink 构建实时电商交易风控系统实战(436)

本文介绍基于Java+Flink构建实时电商交易风控系统的实战经验。系统采用分层架构设计,包含数据采集层、实时计算层、规则引擎层、数据存储层和应用服务层,实现毫秒级风险识别与拦截。核心组件包括Flink 1.17处理交易数据流、Drools规则引擎动态匹配风险规则、Redis缓存热点数据等。文章详细提供了开发环境配置清单和Maven依赖说明,确保系统具备低延迟(≤200ms)、高吞吐(10万TPS)和高可用性(99.99%)特性。该方案已通过生产环境验证,可有效应对恶意刷单、盗刷支付等电商交易风险。

【青云交】华为云云享专家 | 阿里云开发者社区专家博主 技术圈个人影响力前 9 | 博客之星 TOP12 优快云 首位四榜(原力榜 / 作者周榜 / 领军人物 / 综合热榜)榜首,破平台纪录! 苏州地区全榜霸榜,感恩全网十多万粉丝同行! 3942

Python爬虫实战:基于Scrapy与Playwright的搜狐新闻高效爬取

在当今信息爆炸的时代,网络爬虫技术已成为数据获取和分析的重要工具。作为国内领先的新闻门户网站,搜狐新闻包含了大量有价值的新闻数据,这些数据对于舆情分析、市场研究等领域具有重要意义。本文将详细介绍如何使用Python最新的爬虫技术栈(Scrapy框架结合Playwright浏览器自动化工具)来高效爬取搜狐新闻数据。pythontitle = scrapy.Field() # 新闻标题url = scrapy.Field() # 新闻链接。

2201_76125261的博客 1553

设计模式15-门面模式

接口隔离原则强调将大接口拆分成更小的、更加具体的接口,以便客户端只依赖于它们实际需要的接口。上述设计模式在一定程度上体现了这一原则,通过这些模式的合理运用,可以设计出更加灵活和可维护的系统。为此系统中的一组接口提供了一个一致稳定的界面。门面模式是定义了一个高层接口,这个接口使得这一子系统更容易的使用和复用。从客户程序的角度来看,门面模式简化了一个组件系统的接口。组建内部与外部客户程序来说,达到了一种解耦的效果。内部子系统的任何变化都不会影响到门面模式接口的变化。

qq_41810539的博客 1319

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

混合模式(工厂方法模式+策略模式+门面模式)

混合模式(工厂方法模式+策略模式+门面模式)   使用这三种模式设计一个简单的计算器程序:计算器是用于计算数值之间进行数学计算后所获得的值。它包含基本的"加减"功能。以上对以上需求进行分析可以得出计算有两种策略(+与-)。 计算策略的实现: /*抽象策略*/public interface Strategy{ /*定义了计算策略所拥有的算法*/ public int...

alva88888888的博客 513

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

《设计模式之禅》读书笔记-策略模式、享元模式、工厂模式、门面模式混用

前一篇讲的什么是策略模式,策略模式的优缺点,在实际应用中肯定不能这么简单的应用,需要结合其他模式混用。比如结合门面模式解决所有策略类都需要对外暴露的缺点,使用享元模式解决多次创建实例的缺点等。 此篇是根据工作总结而来,业务需求改进与升级需要我们提供一个推送的消息系统,经过选型确定使用Netty与WebSocket做技术支撑。Netty的API简单统一,直接继承它的SimpleChannelUps

timothy316的博客 1250

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

hive 两张表全量数据对比

hive 两张表全量数据对比select * from ( select max(source) source,c1,c2 ,c3,count(*) from ( select 1 source, a.* from dev.astron_wangluochayi_1 a union all

dataastron的博客 1万+

hive -S -e

hive -S -e “show partitions app.app_dm_da”|sort|tail -1|sed ‘s/dt=//g’

dataastron的博客 4719

flink系列5 最简单的hello world

最简单的hello world //0.引入必要的程序元素 import org.apache.flink.api.scala._ object HelloFlink { def main(args: Array[String]): Unit = { // 1.设置运行环境 val env = ExecutionEnvironment.getExecutionEnviro

dataastron的博客 2988

zookeeper快速入门

今天在阿里云的主机第一次启用,还是遇到了小麻烦。没装java。所以直接wget zookeeper的安装源码后,zookeeper单机模式启动了,实际上在日志文件报错了,没注意。好在很快查到了问题。安装了jdk8在主机上。jps用不了,用jps命令没看到QuorumPeerMain。 2017-09-17 21:56:32,909 [myid:] - INFO [main:QuorumPeerC

dataastron的博客 2828

import org.apache.flink.streaming.api.scala._

import org.apache.flink.streaming.api.scala._ 不引入这句话要报错?

dataastron的博客 2216

flink入门教程要点笔记(netcat版本)

今天刚开始搭建flink的环境。 暂时没有装hadoop,直接运行demo。 学习文档:http://ifeve.com/flink-quick-start/ 要点 (1)启动一个本地的Flink集群,启动后是一个守护进程 root      3595  1.6  1.3 7251472 203772 pts/18 Sl+  01:49   0:10 /usr/local/java/jd

dataastron的博客 2191
上一篇: Java读取文件内容的几种方式
下一篇: astron HBase100问
dataastron
博客等级 码龄10年 26粉丝 169原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值