Java结构型设计模式之外观模式

Java之门面模式 门面模式又名外观模式,它是以一种中介的形态处理各种子系统之间的复杂业务,调用者无需知道其中的具体逻辑;比如你要要装修一套房子,你不需要自己去跟水泥工,电工及钢筋工等打交道,你只需要跟装修公司沟通好需要装修的样式即可,这样省时省力。 ...... 阅读详情

概述

有些人可能炒过股票,但其实大部分人都不太懂,这种没有足够了解证券知识的情况下做股票是很容易亏钱的,刚开始炒股肯定都会想,如果有个懂行的帮帮手就好,其实基金就是个好帮手,支付宝里就有许多的基金,它将投资者分散的资金集中起来,交由专业的经理人进行管理,投资于股票、债券、外汇等领域,而基金投资的收益归持有者所有,管理机构收取一定比例的托管管理费用。

定义:

​ 又名门面模式,是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口,外部应用程序不用关心内部子系统的具体的细节,这样会大大降低应用程序的复杂度,提高了程序的可维护性。

​ 外观(Facade)模式是“迪米特法则”的典型应用


结构

外观(Facade)模式包含以下主要角色:

* 外观(Facade)角色:为多个子系统对外提供一个共同的接口。
* 子系统(Sub System)角色:实现系统的部分功能,客户可以通过外观角色访问它。

案例

【例】智能家电控制

小明的爷爷已经60岁了,一个人在家生活:每次都需要打开灯、打开电视、打开空调;睡觉时关闭灯、关闭电视、关闭空调;操作起来都比较麻烦。所以小明给爷爷买了智能音箱,可以通过语音直接控制这些智能家电的开启和关闭。类图如下:

 代码如下:

/**
 * @author: xuzhilei
 * @create: 2022-01-05
 * @description: 电灯类
 **/
public class Light {
    public void on() {
        System.out.println("打开了灯....");
    }
    public void off() {
        System.out.println("关闭了灯....");
    }
}
/**
 * @author: xuzhilei
 * @create: 2022-01-05
 * @description: 电视类
 **/
public class TV {
    public void on() {
        System.out.println("打开了电视....");
    }
    public void off() {
        System.out.println("关闭了电视....");
    }
}
/**
 * @author: xuzhilei
 * @create: 2022-01-05 
 * @description: 空调类
 **/
public class AirCondition {
    public void on() {
        System.out.println("打开了空调....");
    }
    public void off() {
        System.out.println("关闭了空调....");
    }
}
/**
 * @author: xuzhilei
 * @create: 2022-01-05
 * @description: 智能音响 可一键控制所有家电
 **/
public class SmartAppliancesFacade {
    private Light light;
    private TV tv;
    private AirCondition airCondition;

    public SmartAppliancesFacade() {
        light = new Light();
        tv = new TV();
        airCondition = new AirCondition();
    }

    /**
     * 语音控制家电开关
     * @param message
     */
    public void say(String message) {
        if(message.contains("打开")) {
            on();
        } else if(message.contains("关闭")) {
            off();
        } else {
            System.out.println("我没听懂,你可以考虑换个说法");
        }
    }

    /**
     * 关闭所有家电
     */
    private void off() {
        System.out.println("关闭所有家电");
        light.off();
        tv.off();
        airCondition.off();
    }

    /**
     * 开启所有家电
     */
    private void on() {
        System.out.println("开启所有家电");
        light.on();
        tv.on();
        airCondition.on();
    }
}
/**
 * @author: xuzhilei
 * @create: 2022-01-05
 * @description: 测试
 **/
public class Client {
    public static void main(String[] args) {
        //创建智能音响
        SmartAppliancesFacade facade = new SmartAppliancesFacade();
        //开启家电
        facade.say("打开家电");
        //一键关闭所有家电
        facade.say("关闭家电");
    }
}

测试结果:

好处:

* 降低了子系统与客户端之间的耦合度,使得子系统的变化不会影响调用它的客户类。
* 对客户屏蔽了子系统组件,减少了客户处理的对象数目,并使得子系统使用起来更加容易。

缺点:

* 不符合开闭原则,修改很麻烦

使用场景

* 对分层结构系统构建时,使用外观模式定义子系统中每层的入口点可以简化子系统之间的依赖关系。
* 当一个复杂系统的子系统很多时,外观模式可以为系统设计一个简单的接口供外界访问。
* 当客户端与多个子系统之间存在很大的联系时,引入外观模式可将它们分离,从而提高子系统的独立性和可移植性。

 源码解析

使用tomcat作为web容器时,接收浏览器发送过来的请求,tomcat会将请求信息封装成ServletRequest对象,如下图①处对象。但是大家想想ServletRequest是一个接口,它还有一个子接口HttpServletRequest,而我们知道该request对象肯定是一个HttpServletRequest对象的子实现类对象,到底是哪个类的对象呢?可以通过输出request对象,我们就会发现是一个名为RequestFacade的类的对象。

 RequestFacade类就使用了外观模式。先看结构图:

为什么在此处使用外观模式呢?

定义 RequestFacade 类,分别实现 ServletRequest ,同时定义私有成员变量 Request ,并且方法的实现调用 Request 的实现。然后,将 RequestFacade上转为 ServletRequest 传给 servlet 的 service 方法,这样即使在 servlet 中被下转为 RequestFacade ,也不能访问私有成员变量对象中的方法。既用了 Request ,又能防止其中方法被不合理的访问。

 以上就是外观模式的简单演示,与各位优快云的伙伴们共勉,每天记录一点点,每天进步一点点。

Java设计模式学习总结(12)——结构型模式之外观模式 外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。 这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。 介绍 意图:为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。... 阅读详情

相关推荐

【Java设计模式】Java设计模式之(二十二)外观模式(Facade Pattern)

这种类型的设计模式属于结构型模式。 一、组合模式介绍 1.1 含义 外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。 这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。 在日常编码工作中,我们都在有意无意的大量使用外观模式。只要是上层模块需要调度多个子系统(2个以上的类对象),我们都会自觉地创建一个新的类封装这些子系统,提供

No8g攻城狮的博客 845

【设计模式】Java 设计模式之门面模式(Facade)

门面模式作为一种重要的设计模式,在简化复杂系统接口和提高可维护性方面发挥关键作用。它通过提供一个统一的高层接口,使得客户端无需关心底层实现的细节。在实际应用中,门面模式可根据需求进行扩展和变体设计,如分层门面、组合门面等。此外,门面模式常与其他设计模式结合使用,如中介者模式、工厂模式和单例模式,以构建更灵活的系统。未来,随着技术的发展,门面模式将可能面向云原生、结合AI技术,并注重跨平台与跨语言支持,同时加强安全与隐私保护。总之,门面模式将持续发挥重要作用,并在新的领域和场景中展现更多可能性,为构建高效、健

新手村长的专栏 2128

Java结构型设计模式-外观模式

Java外观设计模式(Facade Design Pattern)是一种结构型模式,它为子系统中的一组接口提供一个统一的高层接口。外观模式定义了一个高层接口,这个接口使得子系统更容易使用。外观设计模式的主要目的是为一个复杂的子系统提供一个简单的接口。它的核心是定义一个外观类,这个类为子系统中的多个模块提供一致的接口。客户端只需要与外观类交互,无需直接访问子系统内部的多个模块。综上,外观模式的核心思想是。

在技术的广袤天地里,本博客如精准罗盘。剖析前沿科技,深掘代码奥秘,以精炼笔触,带您穿越复杂技术迷宫,速达知识彼岸。 1139

设计模式:外观模式

外观模式 概述 有些人可能炒过股票,但其实大部分人都不太懂,这种没有足够了解证券知识的情况下做股票是很容易亏钱的,刚开始炒股肯定都会想,如果有个懂行的帮帮手就好,其实基金就是个好帮手,支付宝里就有许多的基金,它将投资者分散的资金集中起来,交由专业的经理人进行管理,投资于股票、债券、外汇等领域,而基金投资的收益归持有者所有,管理机构收取一定比例的托管管理费用。 定义: ​ 又名门面模式,是...

qq_29860591的博客 588

Go 设计模式中外观模式

外观模式(Facade Pattern)是一种结构型设计模式,提供了一个统一的接口,用于访问子系统中的一组接口。外观模式隐藏了子系统的复杂性,使得客户端可以通过简单的接口与子系统进行交互,而不需要了解子系统的内部实现细节。外观模式的核心思想是简化客户端与子系统之间的交互,并降低客户端对子系统的依赖。jQuery:jQuery 是一个流行的 JavaScript 库,它提供了一个简化的接口,用于处理浏览器兼容性和操作 DOM。是外观类,封装了一组子系统的接口,负责将客户端的请求转发给适当的子系统对象。

走向CTO的路上... 272

树莓派与OpenCV实现人脸识别(OpenCV安装篇)

主要看了以下两位博客的文章完成的,也遇到了不少的坑,在这里一一填补说明。 链接: https://blog.youkuaiyun.com/weixin_42163073/article/details/107308759. 链接: https://blog.youkuaiyun.com/weixin_42573595/article/details/108526850. 树莓派与OpenCV实现人脸识别(OpenCV安装篇)一、材料准备:二、系统烧录三、安装OpenCV依赖项四、下载OpenCV-4.3.0五、为OpenCV配置P

weixin_45880057的博客 1万+

Java设计模式—门面模式(带案例分析)

  (尊重劳动成果,转载请注明出处:https://blog.youkuaiyun.com/qq_25827845/article/details/52032536冷血之心的博客)   目录 1、门面模式的定义: 2、通用类图 3、角色定义: Facade门面角色  subsystem 4、门面模式的优点 减少系统的相互依赖 提高了灵活性 提高安全性 5、门面模式的缺点 6、通用代...

冷血之心的博客 1万+

美团外卖 mtgsig 1.2 逆向工程与补环境实战指南

本文深入解析了美团外卖核心风控参数mtgsig 1.2的生成机制与逆向实战。通过拆解其复杂的JSON结构,揭示了设备指纹、环境信息加密等关键字段。重点阐述了在Node.js中模拟浏览器环境(补环境)的核心方法,包括DOM/BOM对象、本地存储及Canvas/WebGL等高级指纹的模拟技巧,为安全研究和合规自动化测试提供了一套完整的技术指南。

uber9的博客 407

java设计模式之门面模式

java设计模式之门面模式

J_Newbie的博客 782

【水文】calico-node 启动失败 Init:CrashLoopBackOff

Defaulted container "calico-node" out of: calico-node, upgrade-ipam (init), install-cni (init), mount-bpffs (init) Error from server (BadRequest): container "calico-node" in pod "calico-node-4j7td" is waiting to start: PodInitializing

大健的日常的博客 1万+

Objective-C实现人工势场法(附完整源码)

Objective-C实现人工势场法(附完整源码)

希望我的博客,能帮上你解决学习中工作中所遇到的问题 426

Java设计模式- 结构型设计模式-外观模式

Java设计模式- 结构型设计模式-外观模式

Fatter$hday的博客 1198

需求跟踪详解

需求跟踪是指在软件项目开发过程中,建立并维护需求与项目各阶段工作产物(如设计文档、代码模块、测试用例等)之间对应关系的过程。它不仅记录需求从提出到实现的完整路径,还能反映需求变更时对各阶段工作的影响范围,是连接用户期望与实际软件开发产出的桥梁。

跟佟格湾一起学习计算机知识吧~ 1421

Java23种设计模式系列——结构型模式之外观模式day4-2

又名门面模式,是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口,外部应用程序不用关心内部子系统的具体的细节,这样会大大降低应用程序的复杂度,提高了程序的可维护性。外观(Facade)模式是“迪米特法则"的典型应用。不符合开闭原则,修改起来很麻烦。...

qq_51553982的博客 228

OpenClaw 自定义 Skill 开发完整指南(最新版)

OpenClaw 中的每个 Skill,本质是一套“能力描述 + 执行逻辑”的组合包,核心特征如下:核心载体:以文件夹为单位,文件夹内必须包含SKILL.md文件(能力描述核心);扩展文件:可选agent.py(Python 执行逻辑)、index.ts(TypeScript 执行逻辑)、(辅助文档/示例资源)等;核心优势:AI 通过阅读 SKILL.md 的自然语言描述理解技能,无需严格遵循代码接口,灵活度极高;

haolove527的专栏 2万+

【git】git: ‘interpret-trailers’ is not a git command. See ‘git --help’

cents 7.6系统. yum源安装git最新版本是1.8.3 报错: git: 'interpret-trailers' is not a git command. See 'git --help'. cannot insert change-id line in .git/COMMIT_EDITMSG 解决: git add xxx git commit -m "xxx" 然后修改 vim .git/hooks/commit-msg #if test -n "${reviewurl}" ; th

machh的专栏 4758

【Java 设计模式】结构型之外观模式

外观模式是一种结构型设计模式,它为复杂系统提供了一个简化的接口,隐藏了系统的复杂性,使得客户端更容易使用系统。外观模式通过创建一个包装类(外观类),将系统的复杂性封装起来,对客户端提供一个简单的接口。外观模式通常包含三个主要角色:外观类(Facade)、子系统类(Subsystem)和客户端(Client)。提供了一个简化的接口,封装了对子系统的调用。实现了系统的功能,由外观类调用。调用外观类来简化系统的使用,无需直接与子系统交互。

好久不见的流星 1003

费雪的未来增长评估:预测颠覆性技术的影响

本文旨在提供一个系统性的框架,用于评估和预测颠覆性技术的增长轨迹。我们将重点关注费雪增长模型(Fisher-Pry Model)这一经典技术扩散理论,探讨其在现代技术预测中的应用价值。文章首先介绍费雪增长模型的基本概念,然后深入其数学原理和算法实现。随后展示实际应用案例,讨论工具资源,最后探讨未来发展趋势。每个部分都包含详细的技术实现和理论分析。费雪增长模型(Fisher-Pry Model):一种描述技术替代过程的S型增长模型,用于预测新技术取代旧技术的速率。

欢迎来到我的优快云空间!这里聚焦AI大模型应用实战,分享前沿技术、实战案例与开发经验。 927

Java设计模式 —— 【结构型模式】外观模式(Facade Pattern)详解

外观模式又名门面模式,是一种通过为多个复杂的子系统提供一个一致的接口,而使这些子系统更加容易被访问的模式。该模式对外有一个统一接口,外部应用程序不用关心内部子系统的具体的细节,这样会大大降低应用程序的复杂度,提高了程序的可维护性。

知唔猪的博客 1035

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

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

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

Java GoF 23种设计模式-结构型模式-外观模式(Facade Pattern)

文章目录一、模式定义二、模式动机三、模式结构四、代码实现 一、模式定义 外观模式(Facade Pattern):外部与一个子系统的通信必须通过一个统一的外观对象进行,为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。外观模式又称为门面模式,它是一种对象结构型模式。 二、模式动机 降低访问复杂系统的内部子系统时的复杂度,简化客户端与内部子系统之间的接口; 客户端不需要知道系统内部的复杂联系,整个系统只需提供一个"接待员"(外观类)即可,由外观类负责与内

WU4566285的博客 368

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

外观模式

外观模式 外观模式(Facade Pattern)隐藏系统的复杂性,并向客户端提供了一个客户端可以访问系统的接口。这种类型的设计模式属于结构型模式,它向现有的系统添加一个接口,来隐藏系统的复杂性。 这种模式涉及到一个单一的类,该类提供了客户端请求的简化方法和对现有系统类方法的委托调用。 外观模式又称之为门面模式 介绍 意图:为子系统中的一组接口提供一个一致的界面,外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 主要解决:降低访问复杂系统的内部子系统时的复杂度,简化客户端与之的接

CentOS 135

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

JAVA设计模式--结构型模式--外观模式

JAVA设计模式--结构型模式--外观模式

qq_42264638的博客 201

Java 设计模式・外观模式篇:从思想到代码实现

结构型设计模式关注如何组合类和对象以构建更大的结构。本文重点介绍了外观模式(Facade),它为复杂子系统提供一个统一的高层接口,简化客户端调用。外观模式通过封装多个子系统的交互逻辑,实现客户端与子系统的解耦,提高代码的可维护性。文章详细展示了外观模式的Java实现代码,包括子系统角色(灯、空调)和外观角色(智能助手),并分析了其优缺点。此外,还将外观模式与适配器模式、代理模式等进行了对比,说明其适用场景。外观模式特别适用于需要简化复杂子系统调用、统一业务流程控制的场景。

l7_yuqi的博客 1047

Java设计模式之外观模式(属于结构型模式)

Java设计模式之外观模式 定义:外观模式也称为门面模式,属于结构型模式。外观模式通过定义一个一致性接口,用以屏蔽内部子系统的实现细节,使用端只需跟这个接口发生调用即可实现调用后台的效果。 通俗的讲,就是后台类实在太多,而你想要调用很多个后台类的一些方法,以前你要做的是,每个类都new 一个对象,然后调用这个对象的方法,如果new的对象太多,这显得十分的繁琐。现在使用外观模式,将创建很多个对象的过...

qq_43653581的博客 325

java设计模式工厂模式_Java中的外观设计模式

java设计模式工厂模式Facade Design Pattern is one of the Structural design patterns (such as Adapter pattern and Decorator pattern). Facade design pattern is used to help client applications to easily interact...

从零开始的教程世界 220

23种设计模式-结构型模式之外观模式(Java版本)

外观模式是结构型设计模式之一,。就像是酒店前台,帮你处理入住、叫车、订餐等各种服务,让你不用和多个部门打交道。

DreamCollector的博客 359
上一篇: 结构型模式之桥接模式
下一篇: 结构型设计模式之组合模式
海深不见鲸
博客等级 码龄6年 7粉丝 31原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值