java 外观设计模式

海康H304NAS 刷机飞牛 本文旨在分享如何将闲置的海康威视H304 NAS刷入飞牛NAS系统,并利用iStoreOS作为安装媒介。之前因为使用极空间NAS,这台H304闲置已久。最近尝试了飞牛NAS,在虚拟机上安装后挂载极空间的电影资源,体验不错,于是决定重新折腾这台H304。我个人喜欢尝试新系统,之前经常更新H304的固件,但设备总在使用一两年后出现故障,需要联系技术清理日志才能恢复。最后一次设备“变砖”后,连技术人员也联系不上了,自己尝试修复未果,设备就此闲置两三年。 阅读详情

外观模式也叫门面模式,属于结构性模式,外观模式还是比较好理解的,平时使用也比较常见

定义:

外观模式是隐藏了系统的复杂性,能够为子系统中的一组接口提供一个统一的接口

举例

我们做Android图片加载是必不可少的, 当然我们都是使用了第三方的框架,比如glide,图片内存缓存一般是先从内存中找,内存没有然后从本地找,本地再没有就从网络去下载图片,现在用代码来说明,先定义一个缓存的接口

package com.facede.v1;
import com.facede.Bitmap;

public interface IMemoryCache {
    Bitmap load(String url);
}

内存加载实现类

package com.facede.v1.impl;
import com.facede.Bitmap;
import com.facede.v1.IMemoryCache;

public class MemoryCacheImpl implements IMemoryCache {
    @Override
    public Bitmap load(String url) {
        return null;
    }
}

本地加载实现类

package com.facede.v1.impl;
import com.facede.Bitmap;
import com.facede.v1.IMemoryCache;

public class DiskCacheImpl implements IMemoryCache {
    @Override
    public Bitmap load(String url) {
        return null;
    }
}

网络下载

package com.facede.v1.impl;
import com.facede.Bitmap;
import com.facede.v1.IMemoryCache;

public class NetDownLoad implements IMemoryCache {
    @Override
    public Bitmap load(String url) {
        return null;
    }
}

由于我没有在Android环境下写,所以Bitmap类是我自己随便定义的,大概意思就行,那我们再写个Test类去测试下

package com.facede.v1.impl;
import com.facede.v1.IMemoryCache;

public class Test {
    private static final String URL = "http://www.baidu.com";
    public static void main(String[] args) {
        IMemoryCache memoryCache = new MemoryCacheImpl();
        IMemoryCache diskCacheImpl =  new DiskCacheImpl();
        IMemoryCache netDownLoad = new NetDownLoad();

        if(memoryCache.load(URL)==null){
            if(diskCacheImpl.load(URL)==null){
                netDownLoad.load(URL);
            }
        }else{//省略...

        }
    }
}

大概是这样,然后看看UML类图,

你会发现上层(也就是Test,其实就是调用方)也持有三个具体的实现类,这样如果要修改的话,就必须要在上层去修改代码,那我们使用外观模式在中间隔离一层,

package com.facede.v1;
import com.facede.v1.impl.DiskCacheImpl;
import com.facede.v1.impl.MemoryCacheImpl;
import com.facede.v1.impl.NetDownLoad;

public class Facede {
    IMemoryCache memoryCache ;
    IMemoryCache diskCacheImpl ;
    IMemoryCache netDownLoad ;
    public Facede(){
        memoryCache = new MemoryCacheImpl();
        diskCacheImpl =  new DiskCacheImpl();
        netDownLoad = new NetDownLoad();
    }
    public void loadBitmap(String url){
        if(memoryCache.load(url)==null){
            if(diskCacheImpl.load(url)==null){
                netDownLoad.load(url);
            }
        }else{//省略...

        }
    }
}

测试类

package com.facede.v1.impl;
import com.facede.v1.Facede;
import com.facede.v1.IMemoryCache;

public abstract class Test implements IMemoryCache {
    private static final String URL = "http://www.baidu.com";

    public static void main(String[] args) {
        Facede facede = new Facede();
        facede.laodBitmap(URL);
    }
}

现在再来看看UML类图

现在发下,上层(Test)就单单和外观类Facede打交道,和具体的实现类没有任何交集,再来看下外观模式的定义

外观模式是隐藏了系统的复杂性,能够为子系统中的一组接口提供一个统一的接口

Facede类其实就是起到了隐藏了系统的复杂性, 提供了统一的访问接口就是loadBimap,里面具体如何实现,上层完全不知道

外观模式优缺点

优点

1:对客户端(上层或者调用方)屏蔽了子系统组件,符合设计模式中的单一职责原则。

2:实现了客户端和子系统的松散耦合,使得子系统个变化不会影响到调用它的客户端,只需要改变外观类即可。

3:一个子系统的变化不会影响到另一个子系统,子系统内部变化也不会影响到外观对象

缺点

外观模式最大的缺点在于违背了“开闭原则”,当增加新的子系统或者移除子系统时需要修改外观类,可以通过引入抽象外观类在一定程度上解决该问题,客户端针对抽象外观类进行编程

 

克里金插值(Kriging)在MATLAB中的实现(克里金工具箱) 一,直接献上克里金插值MATLAB工具箱 链接:https://pan.baidu.com/s/1p0lt2G8KQ-els7Dyw5jPFg 提取码:wcss 下载后将该程序添加到MATLAB安装文件夹中的/toolbox下,然后在设置路径中添加该程序文件为默认路径即可调用程序。 资源中内附程序使用说明PDF。 二、本人实际操作代码如下所示,标注如下 load data1 %载入数据 %模型参... 阅读详情

相关推荐

从STM32F411到华大HC32F460:一个真实项目移植的踩坑与填坑全记录

本文详细记录了从STM32F411移植到华大HC32F460芯片的全过程,包括开发环境搭建、时钟树配置、中断处理、外设驱动、看门狗陷阱、Flash操作和低功耗设计等关键坑点及解决方案。特别针对HC32F460的200MHz主频、双PLL架构和HSRUN模式等特性进行了深入分析,为工程师提供实用的移植指南,帮助节省大量调试时间。

weixin_33691817的博客 419

Java外观模式源码剖析及使用场景

外观模式(Facade Pattern)是一种结构型设计模式,它为子系统中的一组接口提供了一个统一的高层接口,使得子系统更加容易使用。外观模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。简化系统的调用复杂性。通过外观模式,客户端可以只需调用外观类中的方法就可以完成复杂的操作,无需深入了解子系统的内部工作机制。减小系统的编译依赖。通过外观模式,客户端只需要与外观类发生编译依赖,而无须与子系统的其他模块发生直接依赖。有利于体系结构的拓展。

记录点点滴滴 1340

服务器冗余电源维修图纸,冗余热备份电源的电路图设计

在设计某高可靠性计算机系统时,要求其配套电源采取冗余设计。一般来说,可以采取的方案有容量冗余、冗余冷备份方式、并联均流的N+1备份方式、冗余热备份方式。容量冗余是指电源的最大负载能力大于实际负载,也就是“大马拉小车”,其缺点是不利于提高电源的效率,而且对提高电源的可靠性意义不大。冗余冷备份方式是指电源由两个或多个功能相同的单元模块组成,电源启动后由其中一个单元模块向设备供电,当工作单元发生故障时,...

weixin_39671509的博客 1995

外观设计模式

外观设计模式 一、外观设计模式 1、介绍 外观模式(Facade),也叫“过程模式”。 外观模式定义了一个高层接口,用以屏蔽内部子系统的细节,使得客户端只需跟这个接口发生调用,而无需关心这个子系统的内部细节。简化了客户端操作。 2、UML原理类图 外观类(Facade):为客户端提供统一的调用接口,外观类知道哪些子系统负责处理请求,从而将客户端的请求代理给适当子系统对象 客户端(调用者):外观接口的调用者 子系统集合:指模块或者子系统,处理Facade对象指派的任务,功能的实际提供者 3、外观模式的

大树 1484

【Godot】构建可维护的游戏工程 —— 项目代码组织结构

本文系统梳理了Godot引擎项目组织原则与架构模式,提出场景中心化、命名规范一致性和资源隔离三大核心原则。推荐按功能模块划分目录结构(如scenes/、entities/、systems/),采用snake_case命名避免跨平台问题,并通过.gdignore优化资源管理。文章详细解析了自包含场景设计、信号驱动解耦等架构技巧,以及团队协作中的版本控制策略,强调通过模块化设计平衡一致性与实用性。最终目标构建清晰可维护的项目结构,使资源定位和功能扩展更加高效。(148字)

qq_40205510的博客 1174

博图HMI多语言文本列表一键生成攻略:从Excel模板到TIA Portal的完整流程

本文详细介绍了如何利用Excel模板和TIA Portal API实现博图HMI多语言文本列表的一键生成。通过标准化Excel模板设计、解析TIA Portal的XML结构,并结合C#代码实现自动化导入,大幅提升多语言项目的开发效率。特别适用于需要支持多语言版本的自动化设备HMI界面开发。

weixin_26934905的博客 218

【设计模式】用Java实现外观模式

外观模式是一种结构设计模式,旨在为复杂系统提供一个简化的接口,以便客户端可以更方便地使用系统。外观模式通过创建一个高层次的接口,将系统的多个子系统封装起来,并提供一个统一的接口给客户端使用。外观模式的核心思想是通过创建一个外观类(Facade Class),将复杂系统的内部实现细节隐藏起来,只暴露出一个简化的接口给客户端。客户端只需要与外观类进行交互,而不需要直接与子系统的组件进行交互。当一个系统的复杂性变得很高,由于存在大量的子系统和相互关联的类,导致客户端代码变得冗长和复杂时,可以考虑使用外观模式。

分享Java硬核干货 1万+

长安车机破解后能干啥?分享我的UNI-K车机安装第三方应用与优化体验实录

本文详细记录了长安UNI-K车机破解后的实用玩法与深度优化指南,包括安装第三方应用、导航体验升级、影音系统改造及系统美化等。通过工具箱和升级技巧,车主可以大幅提升用车体验,解锁更多隐藏功能。

weixin_33217202的博客 404

Java和设计模式(11):外观模式

外观模式(Facade Pattern)是一种结构型设计模式,它提供了一个统一的接口,用于访问子系统中的一组接口。外观模式隐藏了子系统的复杂性,为客户端提供了一个简单的接口,使得客户端更容易使用子系统。外观模式通过创建一个外观类(Facade),将客户端与子系统之间的交互转移到外观类中。外观类封装了子系统中的一组接口,并提供了一个简化的接口给客户端使用。客户端只需要通过外观类来访问子系统,不需要直接与子系统的各个组件进行交互。外观模式的主要目的是提供一个简化的接口,降低客户端与子系统之间的耦合度。

暗星涌动 751

YOLOv11改进 | 主干/Backbone篇 | 轻量化目标检测网络MobileViTv1改进yolov11有效涨点

本文给大家带来的改进机制是MobileViT系列的V1版本,其作为MobileNet网络的挑战者,其效果自然不用多说,MobileViT模型是为移动设备设计的轻量级、通用目的视觉变换器。它融合了卷积神经网络(CNN)和视觉变换器(ViT)的优势,旨在在保持高效性能的同时减少模型参数和降低延迟。通过其创新的MobileViT Block和多尺度训练方法,MobileViT在多个视觉任务上取得了优异的结果,欢迎大家订阅本专栏,本专栏每周更新3-5篇最新机制,更有包含我所有改进的文件和交流群提供给大家。

Snu77的博客 2336

YOLO11-pose关键点检测:训练实战篇 | 自己数据集从labelme标注到生成yolo格式的关键点数据以及训练教程

教会你如何用自己的数据集转换成对应格式的数据集以及如何训练YOLO11-pose关键点检测

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 5418

Java中外观模式 (Facade Pattern)

Java中外观模式 (Facade Pattern)

sanmansan的博客 718

Android功耗系列专题理论之十三:MTK平台待机功耗问题分析方法

摘要:本文详细分析了MTK平台待机功耗问题的调试方法,重点介绍了SPM电源管理机制、26M时钟控制逻辑以及系统深睡眠状态的判断标准。文章提供了完整的Debug流程,包括日志抓取、唤醒源分析、SCP睡眠状态检查以及时钟/LDO状态排查等实用技巧,并给出硬件漏电点和软件配置异常的排查方案。针对不同模块(Modem/Conn/SSPM等)提供了具体的电源管理绕过命令,适用于功耗问题调试和低功耗模式验证场景。

559

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

java设计模式外观模式 在这里,我还有另一篇关于设计模式的文章-Facade Design Pattern 。 Facade对象用于通过隐藏复杂系统的复杂性来提供简单接口。 立面设计模式 立面是一种结构设计模式,是四个设计模式的帮派之一。 Facade对象用于通过掩盖更复杂的基础系统来提供前端接口。 外观可以提供有限或专用的功能集。 但是,Facade提供的功能主要是客户端应用程序所需...

cunfu5234的博客 202

C# WinForm 基于DirectShow.dll编写的程序,可边预览边保存视频,音频和图片

基于微软的DirectShow.dll的二次开发1.自动识别连接的摄像头跟麦克风且可以对其进行选择(默认选中第一个)2.可录制wmv和avi两种格式的视频并且都带有音频,avi可以录制的分辨率和帧数进行选择,wmv默认进行了淸晰度优化如不喜欢可去除代码中有相关提示3.可在预览点开之后进行拍照,也可边录制视频边拍照4.添加了视频和音频的压缩功能(酌情使用)这次二次开发发现C#对DirectShow的相关信息太少,这次做完也不敢藏私共享出来,还望大家指正

Devexpress16.2.6破解工具

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

java设计模式 订阅模式_Java中的外观设计模式

java设计模式 订阅模式 立面是指建筑物的外观。 当穿过街道时,我们所看到的只是建筑物的外观。 该工作面抽象了建筑物的所有复杂实现细节。 同样, 外观设计模式旨在为子系统中的一组接口提供统一的接口。 这个统一的接口对客户端隐藏了子系统的复杂性。 它属于结构模式类别。 Java中的java.util.Connection是外观,因为它允许我们创建数据库连接并隐藏实现细节。 同样, ja...

最佳 Java 编程 159

计算机控制技术及应用

《计算机控制技术及应用》通过总结作者的科研成果和吸收国内外的先进理论、方法和技术,以计算机控制系统的网络化、开放化、智能化和集成化发展趋势为主线索,主要介绍计算机控制系统的基本概念和计算机控制系统的典型形式,计算机控制系统的数学描述与基本分析方法,以及数字PID控制器、最少拍控制系统、达林算法、状态变量设计法等设计方法及其各种改进算法。重点突出计算机控制系统输入输出通道接口的设计方法和典型控制系统的设计案例与实现方法等。

Java中的外观设计模式

立面是指建筑物的外观。 当穿过街道时,我们所看到的只是建筑物的外观。 该图面抽象了建筑物的所有复杂实施细节。 同样, 外观设计模式旨在为子系统中的一组接口提供统一的接口。 这个统一的接口对客户端隐藏了子系统的复杂性。 它属于结构模式类别。 Java中的java.util.Connection是外观,因为它允许我们创建数据库连接并隐藏实现细节。 同样, java.net。 URL类是另...

最佳 Java 编程 135

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

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

java设计模式之外观设计模式

java设计模式之外观设计模式,包含所有的源代码用例

zdliue的博客 484

JAVA设计模式之 10.外观设计模式

外观设计模式:有个外观类把一些小的方法归类为几个大方法里面。最后调用时就简单明了了。 //外观设计模式 也叫 过程设计模式,门面设计模式 public class Facade { public static void main (String[] args) { System.out.println("*******************************"); HomeTheaterFacade homeTheaterFacade = new Home

L'Étranger的博客 128

Java设计模式——外观设计模式

概述 外观设计模式(Facade)就是为各个子系统中的一组接口提供一个一致的界面,此模式定义了一个高层接口,这个接口使得这一子系统更加容易使用。 UML 外观设计模式中的角色 Client:客户端类,负责功能的具体使用。即类和方法的使用者 Facade:外观类,知道哪些子系统类负责处理请求,将客户端的请求代理分配给对应的子系统。 Subsystem Classes:子系统类的集

wangzunkuan的博客 340

JAVA设计模式(十)设计模式之外观设计模式

前言 本章讲解设计模式中外观设计模式的基本知识 方法 1.概念 迪米特法则(Law of Demeter):又叫作最少知识原则(Least Knowledge Principle 简写LKP),就是说一个对象应当对其他对象有尽可能少的了解,不和陌生人说话。英文简写为: LoD. 在我们实际的编程中,总是免不了调用对象的一个方法,那么如果你调用了多个对象的相关方法,那么就要考虑...

jwang的博客 246

Java设计模式 - 外观设计模式

文章目录1. 影院管理项目2. 传统方式解决影院管理3. 外观模式基本介绍4. 外观模式原理类图5. 外观模式解决影院管理6. 外观模式在MyBatis框架应用的源码分析7. 外观模式的注意事项和细节 1. 影院管理项目 组建一个家庭影院: DVD播放器、投影仪、自动屏幕、环绕立体声、爆米花机。要求完成使用家庭影院的功能,其过程为: 直接用遥控器:统筹各设备开关 开爆米花机 放下屏幕 开投影仪 开音响 开DVD,选dvd 去拿爆米花 调暗灯光 播放 观影结束后,关闭各

你今天真好看呀 369

Java外观设计模式

Java外观设计模式 定义、对应角色、优缺点、应用场景、实例

专注Java领域与微服务架构,热爱人工智能与深度学习 359

java 设计模式:外观设计模式

1、概念 外观设计模式的主要目的在于让外部减少与子系统内部多个模块的交互,从而让外部能够更简单的使用子系统。他负责把客户端的请求转发给子系统内部的各个模块进行处理。 2、使用场景 当你要为一个复杂子系统提供一个简单接口时 客户程序与抽象类的实现部分之间存在很大的依赖性。引入外观类可以将子系统与客户端解耦,从而提高子系统的独立性和可移植性。 当你需要构建一个层次结构的子系统时;在层次化结...

s297165331的专栏 377
上一篇: 每日一道面试题:java创建对象有几种方式
下一篇: 线性查找
zhoushenxian
博客等级 码龄12年 453粉丝 549原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值